import {
  Entity,
  Column,
  CreateDateColumn,
  UpdateDateColumn,
  PrimaryColumn,
  OneToMany,
} from "typeorm";
import { AuthRoleAttr } from "./AuthRoleAttr";

@Entity("authSys")
export class AuthSys {
  @PrimaryColumn({
    comment: "ไอดีหลักของตาราง",
    length: 255,
  })
  id: string;

  @Column({
    comment: "Id ของเมนูหลักถ้าเป็นเมนูหลักจะเป็นค่า null",
    nullable: true,
    default: null,
    length: 255,
  })
  parentId!: string;

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

  @Column({
    comment: "path url ของระบบ",
    nullable: true,
    default: null,
    length: 255,
  })
  path!: string;

  @Column({
    comment: "ลำดับการแสดงผล",
    default: 0,
  })
  order: number;

  @CreateDateColumn({ comment: "สร้างข้อมูลเมื่อ" })
  createdAt!: Date;

  @Column({
    comment: "User Id ที่สร้างข้อมูล",
    length: 40,
    default: "00000000-0000-0000-0000-000000000000",
  })
  createdUserId!: String;

  @UpdateDateColumn({ comment: "แก้ไขข้อมูลล่าสุดเมื่อ" })
  lastUpdatedAt!: Date;

  @Column({
    comment: "User Id ที่แก้ไขข้อมูล",
    length: 40,
    default: "00000000-0000-0000-0000-000000000000",
  })
  lastUpdateUserId!: String;

  @Column({ comment: "ชื่อ User ที่สร้างข้อมูล", length: 200, default: "string" })
  createdFullName!: String;

  @Column({ comment: "ชื่อ User ที่แก้ไขข้อมูลล่าสุด", length: 200, default: "string" })
  lastUpdateFullName!: String;

  @Column({
    nullable: true,
    comment: "ชื่อระบบ",
    length: 255,
    default: null,
  })
  sysName: string;

  @Column({
    nullable: true,
    comment: "รายละเอียด",
    length: 255,
    default: null,
  })
  sysDescription: string;

  @OneToMany(() => AuthRoleAttr, (authRoleAttr) => authRoleAttr.authRoleAttrForSys)
  authRoleAttrs: AuthRoleAttr[];
}

export class CreateAuthSys {
  @PrimaryColumn()
  id: string;

  @Column()
  parentId: string;

  @Column()
  sysName: string;

  @Column()
  sysDescription: string;
}

export type UpdateAuthSys = Partial<CreateAuthSys>;
