import {
  IsEnum,
  IsInt,
  IsNotEmpty,
  IsOptional,
  IsString
} from "class-validator";
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
import { PermissionAction } from '../enums/PermissionAction';
import { User } from './User';

/**
 * Defines the UserAction entity.
 * Will later be used to document a user's actions.
*/
@Entity()
export class UserAction {
  /**
   * Autogenerated unique id (primary key).
   */
  @PrimaryGeneratedColumn()
  @IsInt()
  id: number;

  /**
   * The user that performed the action.
   */
  @ManyToOne(() => User, user => user.actions)
  user: User

  /**
   * The actions's target (e.g. Track#2)
   */
  @Column()
  @IsNotEmpty()
  @IsString()
  target: string;

  /**
   * The actions's action (e.g. UPDATE).
   * Directly pulled from the PermissionAction Enum.
   */
  @Column({ type: 'varchar' })
  @IsEnum(PermissionAction)
  action: PermissionAction;

  /**
   * The description of the change (before-> after; e.g. distance:15->17).
   * Will later be defined in more detail.
   */
  @Column({ nullable: true })
  @IsOptional()
  @IsString()
  changed: string;
}