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

interface DataSurvey {
  answer1: string;
  answer2: string;
  answer3: number;
  status: boolean;
}

interface TabPermissions {
  isEdit: boolean;
  isView: boolean;
}

interface DataPermissions {
  tab1: TabPermissions;
  tab2: TabPermissions;
  tab3: TabPermissions;
  tab4: TabPermissions;
  tab5: TabPermissions;
  tab6: TabPermissions;
  tab7: TabPermissions;
}

interface AppointTopic {
  id: string;
  appointId: string;
  profileId: string;
  name: string;
  position: string;
  positionType: string;
  positionLevel: string;
  role: string;
}

interface AppointTopicMain {
  id: string;
  profileId: string;
  topic: string;
  commandNo: string;
  status: string;
  directors: AppointTopic[];
}

interface ProbationReportType {
  develop_orientation_score: number;
  develop_self_learning_score: number;
  develop_training_seminar_score: number;
  develop_other_training_score: number;
  develop_total_score: number;
  develop_orientation_percent: number;
  develop_self_learning_percent: number;
  develop_training_seminar_percent: number;
  develop_other_training_percent: number;
  develop_total_percent: number;
  develop_result: number;
  achievement_score: number;
  achievement_score_total: number;
  achievement_percent: number;
  achievement_result: number;
  behavior_score: number;
  behavior_score_total: number;
  behavior_percent: number;
  behavior_result: number;
  sum_score: number;
  sum_percent: number;
  reason: string;
  pass_result: number;
  evaluate_date: Date;
}

interface FileType {
  path: string;
  pathname: string;
  fileName: string;
  title: string;
}

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

interface RangeAge {
  min: number;
  max: number;
}

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

interface DataNodeData {
  name: string;
  nodeId: string | null | undefined;
  node: string | null | undefined | number;
}

interface FormFilter {
  page: number;
  pageSize: number;
  keyword: string;
  type: string;
  searchType?: string;
  posType: string;
  posLevel: string;
  retireYear: string | null;
  rangeYear: { min: number; max: number };
  isShowRetire: boolean | null;
  isProbation: boolean | null;
  isAll?: boolean;
  nodeId?: string | null;
  node?: string | null | number;
  retireType?: null | string;
}

interface PosType {
  id: string;
  posTypeName: string;
  posTypeRank: number;
  posLevels: PosLevel[];
  createdAt: Date | null;
  lastUpdatedAt: Date | null;
  lastUpdateFullName: string;
}

interface PosLevel {
  id: string;
  posLevelName: string;
  posLevelRank: number;
  posLevelAuthority: string;
  createdAt: Date | null;
  lastUpdatedAt: Date | null;
  lastUpdateFullName: string;
}

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

interface ResOptionPerson {
  createdAt: string;
  createdFullName: string;
  createdUserId: string;
  id: string;
  lastUpdateFullName: string;
  lastUpdateUserId: string;
  lastUpdatedAt: string;
  name: string;
}

interface DataEducationLevel {
  createdAt: string;
  createdFullName: string;
  id: string;
  lastUpdatedAt: string;
  name: string;
  rank: number;
}
export type {
  ListDataText,
  DataSurvey,
  DataPermissions,
  AppointTopicMain,
  AppointTopic,
  ProbationReportType,
  FileType,
  DataOption,
  RangeAge,
  DataStructureTree,
  DataNodeData,
  FormFilter,
  PosType,
  PosLevel,
  OptionExecutive,
  ResOptionPerson,
  DataEducationLevel
};
