interface DataOption {
  id: string | null;
  name: string;
}

interface DataOptionCheckBox {
  label: string;
  value: boolean;
}
interface DataOptionTechnique {
  label: string;
  value: string;
}

interface FormFilter {
  page: number;
  pageSize: number;
  keyword: string;
  type: string;
  year: number;
  posType: string;
  posLevel: string;
  retireYear: string | null;
  rangeYear: { min: number; max: number };
  isShowRetire: boolean | null;
  isProbation: boolean | null;
}

interface ItemsMenu {
  label: string;
  value: string;
  icon: string;
  color: string;
}

interface NewPagination {
  descending: boolean;
  page: number;
  rowsPerPage: number;
  sortBy: string;
}

interface DataPerson {
  id: string;
  name: string;
  prefix: string;
  rank: string;
  firstName: string;
  lastName: string;
  citizenId: string;
  level: string;
  type: string;
  posLevelId: string;
  posTypeId: string;
  position: string;
  positionSide: string;
  posNo: string;
  oc: string;
  [key: string]: any;
}

interface ItemsDownload {
  label: string;
  value: string;
  icon: string;
  color: string;
}

interface FormProjectDetail {
  developmentProjectTypes: [];
  projectModal: string | null;
  isBackPlanned: boolean;
  isHoldPlanned: boolean;
  projectDayBackPlanned: string | null;
  projectDayHoldPlanned: string | null;
  projectNigthHoldPlanned: string | null;
  developmentProjectTechniquePlanneds: String[];
  isBackActual: boolean;
  isHoldActual: boolean;
  projectDayBackActual: string | null;
  projectDayHoldActual: string | null;
  projectNigthHoldActual: string | null;
  developmentProjectTechniqueActuals: String[];
  projectModalActual?: string | null;
  projectModalPlanned?: string | null;
  strategyChildPlannedId?: string | null; //id ยุทธศาสตร์เป้าหมายตามแผน
  strategyChildPlannedNode: number | null; //node ยุทธศาสตร์เป้าหมายตามแผน
  strategyChildActualId?: string | null; //id ยุทธศาสตร์เป้าหมายตามจริง
  strategyChildActualNode: number | null; //node ยุทธศาสตร์เป้าหมายตามจริง
  dateStart: Date | null; //วันที่เริ่มต้น
  dateEnd: Date | null; //วันที่สิ้นสุด
  totalDate: number | null | string; //รวมระยะเวลา (วัน)
  developmentAddresss: DevelopmentAddress[]; //ที่อยู่ ,จังหวัด
}

interface DevelopmentAddress {
  address: string;
  provinceId: string;
}

interface DataHistory {
  citizenId: string;
  id: string;
  level: string;
  name: string;
  position: string;
  positionSide: string;
  projectName: string;
  type: string;
  year: number;
}

interface OrgTree {
  orgTreeId: string;
  orgRootId: string;
  orgLevel: number;
  orgName: string;
  orgTreeName: string;
  orgTreeShortName: string;
  orgTreeCode: string;
  orgCode: string;
  orgTreeRank: string;
  orgTreeRankSub: string;
  orgTreeOrder: number;
  orgRootCode: string;
  orgTreePhoneEx: string;
  orgTreePhoneIn: string;
  orgTreeFax: string;
  orgRevisionId: string;
  orgRootName: string;
  responsibility: string;
  labelName: string;
  totalPosition: number;
  totalPositionCurrentUse: number;
  totalPositionCurrentVacant: number;
  totalPositionNextUse: number;
  totalPositionNextVacant: number;
  totalRootPosition: number;
  totalRootPositionCurrentUse: number;
  totalRootPositionCurrentVacant: number;
  totalRootPositionNextUse: number;
  totalRootPositionNextVacant: number;
  children: OrgTree[];
}

interface PersonData {
  id: string;
  citizenId: string;
  name: string;
  position: string;
  type: string;
  level: string;
  positionSide: string;
  org: string;
}

interface StrategyNode {
  id: string;
  level: number;
  name: string;
  children: StrategyNode[];
}

interface DataItemsDevelopment {
  value: string;
  label: string;
}

export type {
  DataOption,
  DataOptionCheckBox,
  ItemsMenu,
  NewPagination,
  FormFilter,
  DataPerson,
  ItemsDownload,
  FormProjectDetail,
  DataOptionTechnique,
  DataHistory,
  OrgTree,
  PersonData,
  StrategyNode,
  DataItemsDevelopment,
};
