import { Entity, Column, OneToMany, ManyToOne, JoinColumn } from "typeorm";
import { EntityBase } from "./base/Base";
import { Profile } from "./Profile";
import { ProfileEmployee } from "./ProfileEmployee";
import { ProfileDevelopmentHistory } from "./ProfileDevelopmentHistory";
import { DevelopmentProject } from "./DevelopmentProject";

@Entity("profileDevelopment")
export class ProfileDevelopment extends EntityBase {
  // REQUEST = ขอแก้ไข
  // DEVELOP = พัฒนา
  // KPI = ประเมิน
  @Column({
    nullable: true,
    comment: "ระบบ",
    default: null,
  })
  type: string;

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

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

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

  //   @Column({
  //     nullable: true,
  //     comment: "เป้าหมาย",
  //     default: null,
  //   })
  //   target: string;

  //   @Column({
  //     type: "double",
  //     nullable: true,
  //     default: null,
  //     comment: "ผลการประเมิน",
  //   })
  //   summary: number;

  //   @Column({
  //     nullable: true,
  //     comment: "ระดับคะแนน",
  //     default: null,
  //   })
  //   point: number;

  @Column({
    nullable: true,
    comment: "เกณฑ์การประเมิน 10",
    default: null,
  })
  achievement10: string;

  @Column({
    nullable: true,
    comment: "เกณฑ์การประเมิน 5",
    default: null,
  })
  achievement5: string;

  @Column({
    nullable: true,
    comment: "เกณฑ์การประเมิน 0",
    default: null,
  })
  achievement0: string;

  @Column({
    comment: "วิธีพัฒนา70",
    default: false,
  })
  isDevelopment70: boolean;

  @Column({
    comment: "วิธีพัฒนา20",
    default: false,
  })
  isDevelopment20: boolean;

  @Column({
    comment: "วิธีพัฒนา10",
    default: false,
  })
  isDevelopment10: boolean;

  @Column({
    nullable: true,
    comment: "รายละเอียดอื่นๆ 70 แผน",
    default: null,
  })
  reasonDevelopment70: string;

  @Column({
    nullable: true,
    comment: "รายละเอียดอื่นๆ 20 แผน",
    default: null,
  })
  reasonDevelopment20: string;

  @Column({
    nullable: true,
    comment: "รายละเอียดอื่นๆ 10 แผน",
    default: null,
  })
  reasonDevelopment10: string;

  @Column({
    nullable: true,
    comment: "เป้าหมายการนำไปพัฒนางาน",
    length: 255,
    default: null,
  })
  developmentTarget: string;

  @Column({
    nullable: true,
    comment: "วิธีการวัดผลการพัฒนา",
    length: 255,
    default: null,
  })
  developmentResults: string;

  @Column({
    nullable: true,
    comment: "รายงานผลการพัฒนา",
    length: 255,
    default: null,
  })
  developmentReport: string;

  @Column({
    nullable: true,
    length: 40,
    comment: "id kpi development",
    default: null,
  })
  kpiDevelopmentId: string;

  @Column({
    nullable: false,
    comment: "สถานะลบข้อมูลการพัฒนารายบุคคล (Individual Development Plan)",
    default: false,
  })
  isDeleted: boolean;

  @OneToMany(
    () => ProfileDevelopmentHistory,
    (profileDevelopmentHistory) => profileDevelopmentHistory.histories,
  )
  profileDevelopmentHistories: ProfileDevelopmentHistory[];

  @ManyToOne(() => Profile, (profile) => profile.profileDevelopments)
  @JoinColumn({ name: "profileId" })
  profile: Profile;

  @ManyToOne(() => ProfileEmployee, (ProfileEmployee) => ProfileEmployee.profileDevelopments)
  @JoinColumn({ name: "profileEmployeeId" })
  profileEmployee: ProfileEmployee;

  @OneToMany(
    () => DevelopmentProject,
    (developmentProject) => developmentProject.profileDevelopment,
  )
  developmentProjects: DevelopmentProject[];
}

export class CreateProfileDevelopment {
  type?: string | null;
  profileId: string | null;
  name: string | null;
  //   target: string | null;
  achievement10?: string | null;
  achievement5?: string | null;
  achievement0?: string | null;
  kpiDevelopmentId?: string | null;
  reasonDevelopment70?: string | null;
  reasonDevelopment20?: string | null;
  reasonDevelopment10?: string | null;
  isDevelopment70: boolean | null;
  isDevelopment20: boolean | null;
  isDevelopment10: boolean | null;
  //   summary?: number | null;
  //   point?: number | null;
  developmentTarget?: string | null;
  developmentResults?: string | null;
  developmentReport?: string | null;
  developmentProjects?: string[];
}

export class CreateProfileEmployeeDevelopment {
  type?: string | null;
  profileEmployeeId: string | null;
  name: string | null;
  //   target: string | null;
  achievement10?: string | null;
  achievement5?: string | null;
  achievement0?: string | null;
  kpiDevelopmentId?: string | null;
  reasonDevelopment70?: string | null;
  reasonDevelopment20?: string | null;
  reasonDevelopment10?: string | null;
  isDevelopment70: boolean | null;
  isDevelopment20: boolean | null;
  isDevelopment10: boolean | null;
  //   summary?: number | null;
  //   point?: number | null;
  developmentTarget?: string | null;
  developmentResults?: string | null;
  developmentReport?: string | null;
  developmentProjects?: string[];
}

export type UpdateProfileDevelopment = {
  type?: string | null;
  name: string | null;
  //   target: string | null;
  achievement10?: string | null;
  achievement5?: string | null;
  achievement0?: string | null;
  kpiDevelopmentId?: string | null;
  reasonDevelopment70?: string | null;
  reasonDevelopment20?: string | null;
  reasonDevelopment10?: string | null;
  isDevelopment70: boolean | null;
  isDevelopment20: boolean | null;
  isDevelopment10: boolean | null;
  //   summary?: number | null;
  //   point?: number | null;
  developmentTarget?: string | null;
  developmentResults?: string | null;
  developmentReport?: string | null;
  developmentProjects?: string[];
};
