import { Entity, Column, ManyToOne, JoinColumn } from "typeorm";
import { EntityBase } from "./base/Base";
import { ChangePosition } from "./ChangePosition";

@Entity("profileChangePosition")
export class ProfileChangePosition extends EntityBase {
  @Column({ nullable: true, comment: "เหตุผลที่รับโอนราชการ", type: "text", default: null })
  reason: string;

  @Column({ nullable: true, comment: "วุฒิ/สาขาเดิม", default: null })
  educationOld: string;

  @Column({ nullable: true, comment: "สังกัดเดิม ตำแหน่ง", default: null })
  organizationPositionOld: string;

  @Column({ nullable: true, comment: "สังกัดเดิม", default: null })
  organizationOld: string;

  @Column({ nullable: true, comment: "ตำแหน่งเดิม", default: null })
  positionOld: string;

  @Column({ nullable: true, comment: "ข้อมูลหน่วยงานเดิม ตำแหน่งประเภท", default: null })
  positionTypeOld: string;

  @Column({ nullable: true, comment: "ข้อมูลหน่วยงานเดิม ระดับ", default: null })
  positionLevelOld: string;

  @Column({ nullable: true, comment: "ข้อมูลหน่วยงานเดิม เลขที่", default: null })
  positionNumberOld: string;

  @Column({
    nullable: true,
    comment: "ข้อมูลหน่วยงานเดิม เงินเดือน",
    type: "double",
    default: null,
  })
  amountOld: number;

  @Column({
    nullable: true,
    type: "datetime",
    comment: "ดำรงตำแหน่งในระดับปัจจุบันเมื่อ",
    default: null,
  })
  dateCurrent: Date;

  @Column({ nullable: true, comment: "profile Id", default: null })
  profileId: string;

  @Column({ nullable: true, comment: "คำนำหน้า", default: null })
  prefix: string;

  @Column({ nullable: true, comment: "ชื่อ", default: null })
  firstName: string;

  @Column({ nullable: true, comment: "นามสกุล", default: null })
  lastName: string;

  @Column({ nullable: true, comment: "เลขบัตรประชาชน", default: null })
  citizenId: string;

  @Column({ nullable: true, type: "datetime", comment: "วันเกิด", default: null })
  birthDate: Date;

  @Column({ nullable: true, comment: "ชื่อหน่วยงาน root", default: null })
  root: string;

  @Column({ nullable: true, comment: "id หน่วยงาน root", default: null })
  rootId: string;

  @Column({ nullable: true, comment: "ชื่อย่อหน่วยงาน root", default: null })
  rootShortName: string;

  @Column({ nullable: true, comment: "ชื่อหน่วยงาน child1", default: null })
  child1: string;

  @Column({ nullable: true, comment: "id หน่วยงาน child1", default: null })
  child1Id: string;

  @Column({ nullable: true, comment: "ชื่อย่อหน่วยงาน child1", default: null })
  child1ShortName: string;

  @Column({ nullable: true, comment: "ชื่อหน่วยงาน child2", default: null })
  child2: string;

  @Column({ nullable: true, comment: "id หน่วยงาน child2", default: null })
  child2Id: string;

  @Column({ nullable: true, comment: "ชื่อย่อหน่วยงาน child2", default: null })
  child2ShortName: string;

  @Column({ nullable: true, comment: "ชื่อหน่วยงาน child3", default: null })
  child3: string;

  @Column({ nullable: true, comment: "id หน่วยงาน child3", default: null })
  child3Id: string;

  @Column({ nullable: true, comment: "ชื่อย่อหน่วยงาน child3", default: null })
  child3ShortName: string;

  @Column({ nullable: true, comment: "ชื่อหน่วยงาน child4", default: null })
  child4: string;

  @Column({ nullable: true, comment: "id หน่วยงาน child4", default: null })
  child4Id: string;

  @Column({ nullable: true, comment: "ชื่อย่อหน่วยงาน child4", default: null })
  child4ShortName: string;

  @Column({ nullable: true, comment: "ระดับโครงสร้าง", type: "int", default: null })
  node: number;

  @Column({ nullable: true, comment: "id โครงสร้าง", type: "uuid", default: null })
  nodeId: string;

  @Column({ nullable: true, comment: "id อัตรากำลัง", default: null })
  posmasterId: string;

  @Column({ nullable: true, comment: "id revision", default: null })
  orgRevisionId: string;

  @Column({ nullable: true, comment: "id ตำแหน่ง", default: null })
  positionId: string;

  @Column({ nullable: true, comment: "สายงาน", default: null })
  positionField: string;

  @Column({ nullable: true, comment: "เลขที่ตำแหน่ง", type: "int", default: null })
  posMasterNo: number;

  @Column({ nullable: true, comment: "ชื่อตำแหน่งในสายงาน", default: null })
  position: string;

  @Column({ nullable: true, comment: "id ประเภทตำแหน่ง", default: null })
  posTypeId: string;

  @Column({ nullable: true, comment: "ชื่อประเภทตำแหน่ง", default: null })
  posTypeName: string;

  @Column({ nullable: true, comment: "id ระดับตำแหน่ง", default: null })
  posLevelId: string;

  @Column({ nullable: true, comment: "ชื่อระดับตำแหน่ง", default: null })
  posLevelName: string;

  @Column({ nullable: true, comment: "ชื่อหน่วยงาน root old", default: null })
  rootOld: string;

  @Column({ nullable: true, comment: "id หน่วยงาน root old", default: null })
  rootOldId: string;

  @Column({ nullable: true, comment: "ชื่อย่อหน่วยงาน root old", default: null })
  rootShortNameOld: string;

  @Column({ nullable: true, comment: "ชื่อหน่วยงาน child1 old", default: null })
  child1Old: string;

  @Column({ nullable: true, comment: "id หน่วยงาน child1 old", default: null })
  child1OldId: string;

  @Column({ nullable: true, comment: "ชื่อย่อหน่วยงาน child1 old", default: null })
  child1ShortNameOld: string;

  @Column({ nullable: true, comment: "ชื่อหน่วยงาน child2 old", default: null })
  child2Old: string;

  @Column({ nullable: true, comment: "id หน่วยงาน child2 old", default: null })
  child2OldId: string;

  @Column({ nullable: true, comment: "ชื่อย่อหน่วยงาน child2 old", default: null })
  child2ShortNameOld: string;

  @Column({ nullable: true, comment: "ชื่อหน่วยงาน child3 old", default: null })
  child3Old: string;

  @Column({ nullable: true, comment: "id หน่วยงาน child3 old", default: null })
  child3OldId: string;

  @Column({ nullable: true, comment: "ชื่อย่อหน่วยงาน child3 old", default: null })
  child3ShortNameOld: string;

  @Column({ nullable: true, comment: "ชื่อหน่วยงาน child4 old", default: null })
  child4Old: string;

  @Column({ nullable: true, comment: "id หน่วยงาน child4 old", default: null })
  child4OldId: string;

  @Column({ nullable: true, comment: "ชื่อย่อหน่วยงาน child4 old", default: null })
  child4ShortNameOld: string;

  @Column({ nullable: true, comment: "เลขที่ตำแหน่ง old", type: "int", default: null })
  posMasterNoOld: number;

  @Column({ nullable: true, comment: "id ประเภทตำแหน่ง old", default: null })
  posTypeOldId: string;

  @Column({ nullable: true, comment: "ชื่อประเภทตำแหน่ง old", default: null })
  posTypeNameOld: string;

  @Column({ nullable: true, comment: "id ระดับตำแหน่ง old", default: null })
  posLevelOldId: string;

  @Column({ nullable: true, comment: "ชื่อระดับตำแหน่ง old", default: null })
  posLevelNameOld: string;

  @Column({ nullable: true, comment: "สถานะ", type: "text", default: null })
  status: string;

  @Column({
    nullable: true,
    length: 40,
    comment: "คีย์นอก(FK)ของตาราง ChangePosition",
    default: null,
  })
  changePositionId: string;

  @ManyToOne(() => ChangePosition, (v) => v.profileChangePosition)
  @JoinColumn({ name: "changePositionId" })
  profile: ChangePosition;
}

//เพิ่มรายชื่อผู้ที่ย้ายสับเปลี่ยนตำแหน่ง
export class CreateProfileChangePosition {
  changePositionId: string;
  profiles: ProfileItem[];
}

export class ProfileItem {
  profileId: string;
  prefix: string;
  firstName: string;
  lastName: string;
  citizenId: string;
  birthDate: Date | null;
  positionOld: string | null;
  positionTypeOld: string | null;
  positionLevelOld: string | null;
  positionNumberOld: string | null;
  organizationOld: string | null;
  organizationPositionOld?: string | null;
  amountOld: number | null;
  educationOld: string | null;
  rootOld: string | null;
  rootOldId: string | null;
  rootShortNameOld: string | null;
  child1Old: string | null;
  child1OldId: string | null;
  child1ShortNameOld: string | null;
  child2Old: string | null;
  child2OldId: string | null;
  child2ShortNameOld: string | null;
  child3Old: string | null;
  child3OldId: string | null;
  child3ShortNameOld: string | null;
  child4Old: string | null;
  child4OldId: string | null;
  child4ShortNameOld: string | null;
  posMasterNoOld: number | null;
  posTypeOldId: string | null;
  posTypeNameOld: string | null;
  posLevelOldId: string | null;
  posLevelNameOld: string | null;
}

//แก้ไขข้อมูลเพื่อลงบัญชีแนบท้าย
export type UpdateProfileChangePosition = {
  educationOld: string;
  posMasterNoOld: number;
  positionTypeOld: string;
  positionLevelOld: string;
  organizationPositionOld: string;
  amountOld: number;
  dateCurrent: Date;
  reason: string | null;
};

//เลือกหน่วยงานที่รับย้าย
export type SelectProfileChangePosition = {
  posmasterId: string;
  node: number;
  nodeId: string;
  orgRevisionId: string;
  positionId: string;
  posMasterNo: number;
  position: string;
  positionField: string;
  posTypeId: string | null;
  posTypeName: string;
  posLevelId: string | null;
  posLevelName: string;
};
