import { Entity, Column, ManyToOne, JoinColumn } from "typeorm";
import { EntityBase } from "./base/Base";
import { EmployeePosType } from "./EmployeePosType";
import { EmployeePosLevel } from "./EmployeePosLevel";
import { EmployeePosMaster } from "./EmployeePosMaster";
import { EmployeeTempPosMaster } from "./EmployeeTempPosMaster";

@Entity("employeePosition")
export class EmployeePosition extends EntityBase {
  @Column({
    nullable: true,
    comment: "ชื่อตำแหน่ง",
    length: 255,
    default: null,
  })
  positionName: string;

  @Column({
    length: 40,
    comment: "คีย์นอก(FK)ของตาราง employeePosType",
  })
  posTypeId: string;

  @Column({
    length: 40,
    comment: "คีย์นอก(FK)ของตาราง employeePosLevel",
  })
  posLevelId: string;

  @Column({
    comment: "เป็นตำแหน่งที่ถูกเลือกในรอบนั้นๆ หรือไม่?",
    default: false,
  })
  positionIsSelected: boolean;

  @Column({
    length: 40,
    comment: "เชื่อมโยงกับตารางเลขที่ตำแหน่ง",
    nullable: true,
    default: null,
  })
  posMasterId: string;

  @Column({
    length: 40,
    comment: "เชื่อมโยงกับตารางเลขที่ตำแหน่ง",
    nullable: true,
    default: null,
  })
  posMasterTempId: string;

  @ManyToOne(() => EmployeePosMaster, (posMaster) => posMaster.positions)
  @JoinColumn({ name: "posMasterId" })
  posMaster: EmployeePosMaster;

  @ManyToOne(() => EmployeeTempPosMaster, (posMaster) => posMaster.positions)
  @JoinColumn({ name: "posMasterTempId" })
  posMasterTemp: EmployeeTempPosMaster;

  @ManyToOne(() => EmployeePosType, (posType) => posType)
  @JoinColumn({ name: "posTypeId" })
  posType: EmployeePosType;

  @ManyToOne(() => EmployeePosLevel, (posLevel) => posLevel)
  @JoinColumn({ name: "posLevelId" })
  posLevel: EmployeePosLevel;
}

export class CreateEmployeePosition {
  @Column()
  positionName: string | null;

  @Column("uuid")
  posTypeId: string | null;

  @Column("uuid")
  posLevelId: string | null;
}

export class UpdateEmployeePosition {
  @Column()
  positionName: string;

  @Column("uuid")
  posTypeId: string;

  @Column("uuid")
  posLevelId: string;
}
