interface DataActive {
  activeId: string;
  activeName: string;
  draftId: string;
  draftName: string;
  isPublic: boolean;
  orgPublishDate: Date | null;
}

interface SumPosition {
  totalPosition: number;
  totalPositionCurrentUse: number;
  totalPositionCurrentVacant: number;
  totalPositionNextUse: number;
  totalPositionNextVacant: number;
  totalRootPosition: number;
  totalRootPositionCurrentUse: number;
  totalRootPositionCurrentVacant: number;
  totalRootPositionNextUse: number;
  totalRootPositionNextVacant: number;
}

interface OrgTree {
  orgTreeId: string;
  orgRootId: string;
  orgLevel: number;
  orgTreeName: string;
  orgTreeShortName: string;
  orgTreeCode: string;
  orgCode: string;
  orgTreeRank: string;
  orgTreeOrder: number | null;
  orgRootCode: string;
  orgTreePhoneEx: string;
  orgTreePhoneIn: string;
  orgTreeFax: string;
  orgRevisionId: string;
  children: OrgTree[];
}

interface OrgRevision {
  orgRevisionCreatedAt: string | null;
  orgRevisionId: string;
  orgRevisionIsCurrent: boolean;
  orgRevisionIsDraft: boolean;
  orgRevisionName: string;
}

interface OptionType {
  id: string;
  posTypeName: string;
}

interface OptionLevel {
  id: string;
  posLevelName: string;
}

interface OptionExecutive {
  id: string;
  posExecutiveName: string;
}

interface DataPosition {
  id: string;
  posExecutiveId: string;
  posExecutiveName: string;
  posLevelId: string;
  posLevelName: string;
  posTypeId: string;
  posTypeName: string;
  positionArea: string;
  positionExecutiveField: string;
  positionField: string;
  positionIsSelected: boolean;
  positionName: string;
}

interface Position {
  id: string; // id ตำแหน่ง
  positionName: string; // ชื่อตำแหน่งในสายงาน (ชื่อตำแหน่ง)
  positionField: string; // สายงาน
  posTypeId: string; // ประเภทตำแหน่ง
  posTypeName: string; // ประเภทตำแหน่ง
  posLevelId: string; // ระดับตำแหน่ง
  posLevelName: string; // ระดับตำแหน่ง
  posExecutiveId: string; // ตำแหน่งทางการบริหาร
  posExecutiveName: string; // ตำแหน่งทางการบริหาร
  positionExecutiveField: string; // ด้านทางการบริหาร
  positionArea: string; // ด้าน/สาขา
  positionIsSelected: boolean; // เป็นตำแหน่งที่ถูกเลือกในรอบนั้นๆ หรือไม่?
}

interface PosMaster {
  id: string; // id อัตรากำลัง posmaster
  orgShortname: string; // อักษรย่อตำแหน่ง
  posMasterNoPrefix: string; // Prefix นำหน้าตำแหน่งเลขที่ เป็น Optional (ไม่ใช่อักษรย่อของหน่วยงาน/ส่วนราชการ)
  posMasterNo: number | string; // ตำแหน่งเลขที่ เป็นตัวเลข
  posMasterNoSuffix: string | null; // Suffix หลังตำแหน่งเลขที่ เช่น ช.
  positionName: string; // ชื่อตำแหน่งในสายงาน (ชื่อตำแหน่ง)
  positionField: string; // สายงาน
  posTypeId: string; // ประเภทตำแหน่ง
  posTypeName: string; // ประเภทตำแหน่ง
  posLevelId: string; // ระดับตำแหน่ง
  posLevelName: string; // ระดับตำแหน่ง
  posExecutiveId: string; // ตำแหน่งทางการบริหาร
  posExecutiveName: string; // ตำแหน่งทางการบริหาร
  positionExecutiveField: string; // ด้านทางการบริหาร
  positionArea: string; // ด้าน/สาขา
  positionIsSelected: boolean; // เป็นตำแหน่งที่ถูกเลือกในรอบนั้นๆ หรือไม่?
  fullNameCurrentHolder: string | null;
  fullNameNextHolder: string | null;
  positions: Position[]; // ตำแหน่ง
  isSit: boolean;
  profilePosition: string;
  profilePostype: string;
  profilePoslevel: string;
}
interface Position2 {
  id: string; // id ตำแหน่ง
  positionName: string; // ชื่อตำแหน่งในสายงาน (ชื่อตำแหน่ง)
  positionField: string; // สายงาน
  posTypeId: string; // ประเภทตำแหน่ง
  posTypeName: string; // ประเภทตำแหน่ง
  posLevelId: string; // ระดับตำแหน่ง
  posLevelName: string; // ระดับตำแหน่ง
  posExecutiveId: string; // ตำแหน่งทางการบริหาร
  posExecutiveName: string; // ตำแหน่งทางการบริหาร
  positionExecutiveField: string; // ด้านทางการบริหาร
  positionArea: string; // ด้าน/สาขา
  positionIsSelected: string; // เป็นตำแหน่งที่ถูกเลือกในรอบนั้นๆ หรือไม่?
}

interface PosMaster2 {
  id: string; // id อัตรากำลัง posmaster
  orgShortname: string; // อักษรย่อตำแหน่ง
  posMasterNoPrefix: string; // Prefix นำหน้าตำแหน่งเลขที่ เป็น Optional (ไม่ใช่อักษรย่อของหน่วยงาน/ส่วนราชการ)
  posMasterNo: number | string; // ตำแหน่งเลขที่ เป็นตัวเลข
  posMasterNoSuffix: string | null; // Suffix หลังตำแหน่งเลขที่ เช่น ช.
  positionName: string; // ชื่อตำแหน่งในสายงาน (ชื่อตำแหน่ง)
  positionField: string; // สายงาน
  posTypeId: string; // ประเภทตำแหน่ง
  posTypeName: string; // ประเภทตำแหน่ง
  posLevelId: string; // ระดับตำแหน่ง
  posLevelName: string; // ระดับตำแหน่ง
  posExecutiveId: string; // ตำแหน่งทางการบริหาร
  posExecutiveName: string; // ตำแหน่งทางการบริหาร
  positionExecutiveField: string; // ด้านทางการบริหาร
  positionArea: string; // ด้าน/สาขา
  positionIsSelected: string; // เป็นตำแหน่งที่ถูกเลือกในรอบนั้นๆ หรือไม่?
  positions: Position[]; // ตำแหน่ง
}

interface HistoryPos {
  id: string; //id node
  orgShotName: string; //ชื่อย่อส่วนราชการ
  lastUpdatedAt: Date; //วันที่แก้ไข
  posMasterNoPrefix: string; //Prefix นำหน้าตำแหน่งเลขที่ เป็น Optional (ไม่ใช่อักษรย่อของหน่วยงาน/ส่วนราชการ)
  posMasterNo: number; //ตำแหน่งเลขที่ เป็นตัวเลข
  posMasterNoSuffix: string; //Suffix หลังตำแหน่งเลขที่ เช่น ช.
}

interface SelectPerson {
  citizenId: string;
  firstName: string;
  id: string;
  lastName: string;
  posLevel: string;
  posType: string;
  position: string;
  prefix: string;
}

interface PosLevels {
  id: string;
  posLevelAuthority: null;
  posLevelName: string;
  posLevelRank: number;
}
interface TypePos {
  id: string;
  PosLevels: PosLevels[];
  posTypeName: string;
  posTypeRank: number;
}

export type {
  DataActive,
  OrgTree,
  OrgRevision,
  OptionType,
  OptionLevel,
  OptionExecutive,
  DataPosition,
  PosMaster,
  PosMaster2,
  Position,
  Position2,
  SumPosition,
  HistoryPos,
  SelectPerson,
  TypePos,
};
