import type { zipCodeOption } from "../../components/PersonalDetail/profileType";
interface DataOption {
  id: number | null;
  name: string;
  disable?: boolean;
}
interface ListDataText {
  value: string;
  label: string;
}

interface DataOption1 {
  id: string | null;
  name: string | null;
  disable?: boolean;
}
interface DataOptionInsignia {
  id: string;
  name: string;
  typeName: string;
}

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

interface EduOps {
  levelOptions: optionData[];
  positionPathOptions: optionData[];
}

interface InformationOps {
  prefixOps: optionData[];
  genderOps: optionData[];
  bloodOps: optionData[];
  statusOps: optionData[];
  religionOps: optionData[];
  employeeClassOps: optionData[];
  employeeTypeOps: optionData[];
}

interface AddressOps {
  provinceOps: optionData[];
  districtOps: optionData[];
  districtCOps: optionData[];
  subdistrictOps: zipCodeOption[];
  subdistrictCOps: zipCodeOption[];
}

interface InsigniaOps {
  insigniaOptions: DataOptionInsignia[];
}

interface Pagination {
  rowsPerPage: number;
}

interface treeTab {
  id: string;
  label: string;
  children: treeTab[];
}

interface CheckboxItem {
  id: number;
  label: string;
}

interface Property {
  name: string;
  value: boolean;
}

interface PointExam {
  pointA: number;
  pointB: number;
  pointC: number;
  pointTotalA: number;
  pointTotalB: number;
  pointTotalC: number;
  point: number;
  pointTotal: number;
  examNumber: number;
  examRound: number;
  pass: string | null;
}

interface Education {
  id: string;
  educationLevel: string;
  educationLevelId: string;
  institute: string;
  degree: string;
  field: string;
  gpa: string;
  country: string;
  duration: string;
  other: string;
  fundName: string;
  durationYear: number;
  finishDate: Date;
  isDate: string;
  startDate: Date;
  endDate: Date;
  positionPath: string;
  isEducation: boolean;
}

interface Family {
  couple: string;
  marryPrefix: string;
  marryPrefixId: string;
  marryFirstName: string;
  marryLastName: string;
  marryOccupation: string;
  fatherPrefix: string;
  fatherPrefixId: string;
  fatherFirstName: string;
  fatherLastName: string;
  fatherOccupation: string;
  motherPrefix: string;
  motherPrefixId: string;
  motherFirstName: string;
  motherLastName: string;
  motherOccupation: string;
}

interface Address {
  registAddress: string;
  registSubDistrict: string;
  registSubDistrictId: string;
  registZipCode: string;
  registDistrict: string;
  registDistrictId: string;
  registProvince: string;
  registProvinceId: string;
  currentAddress: string;
  currentSubDistrict: string;
  currentSubDistrictId: string;
  currentZipCode: string;
  currentDistrict: string;
  currentDistrictId: string;
  currentProvince: string;
  currentProvinceId: string;
  registSame: string;
}

interface AddressData {
  subDistrictId: string;
  zipCode: string;
  districtId: string;
  provinceId: string;
}

interface Certificate {
  id: string;
  certificateNo: string;
  issuer: string;
  issueDate: Date;
  expireDate: Date;
  certificateType: string;
}

const AddressDataDefualt: Address = {
  registAddress: "",
  currentAddress: "",
  registSubDistrict: "",
  registSubDistrictId: "",
  registZipCode: "",
  registDistrict: "",
  registDistrictId: "",
  registProvince: "",
  registProvinceId: "",
  currentSubDistrict: "",
  currentSubDistrictId: "",
  currentZipCode: "",
  currentDistrict: "",
  currentDistrictId: "",
  currentProvince: "",
  currentProvinceId: "",
  registSame: "0",
};

const FamilyDataDefualt: Family = {
  couple: "0",
  marryPrefix: "",
  marryPrefixId: "",
  marryFirstName: "",
  marryLastName: "",
  marryOccupation: "",
  fatherPrefix: "",
  fatherPrefixId: "",
  fatherFirstName: "",
  fatherLastName: "",
  fatherOccupation: "",
  motherPrefix: "",
  motherPrefixId: "",
  motherFirstName: "",
  motherLastName: "",
  motherOccupation: "",
};
interface Assign {
  id: number;
  personal_id: string;
  knowlage_skill_map_no: number;
  round_no: number;
  date_start: Date;
  date_finish: Date;
  behavior_desc: string;
  other_desc: string;
  other4_desc: string;
  othor5_no1_desc: string;
  othor5_no2_desc: string;
  experimenter_dated: Date;
  createdAt: Date;
  updatedAt: Date;
}

interface DataProfile {
  child1: string | null;
  child1ShortName: string | null;
  child2: string | null;
  child2ShortName: string | null;
  child3: string | null;
  child3ShortName: string | null;
  child4: string | null;
  child4ShortName: string | null;
  child1Old?: string | null;
  child1ShortNameOld?: string | null;
  child2Old?: string | null;
  child2ShortNameOld?: string | null;
  child3Old?: string | null;
  child3ShortNameOld?: string | null;
  child4Old?: string | null;
  child4ShortNameOld?: string | null;
  createdAt: string | Date;
  dateEnd: string | Date;
  dateStart: string | Date;
  firstName: string;
  id: string;
  isActive: boolean;
  lastName: string;
  organization: string;
  organizationPositionOld: string;
  posLevelName: string;
  posLevelNameOld?: string;
  posMasterNo: number | null;
  posTypeName: string;
  posTypeNameOld?: string;
  position: string;
  positionOld?: string;
  prefix: string;
  profileId: string;
  reason: string;
  root: string;
  rootShortName: string | null;
  rootOld?: string;
  rootShortNameOld?: string | null;
  status: string;
  positionType?: string;
  positionLevel?: string;
  rank?: string | null;
}

interface tableType {
  personId: string;
  idcard: string;
  prefix: string;
  firstName: string;
  lastName: string;
  position: string;
  positionLevel: string;
  organization: string;
  salary: string;
  name: string;
}

interface ListMenu {
  label: string;
  icon: string;
  type: string;
  color: string;
}

interface DataEducation {
  university: string;
  degree: string;
  major: string;
  graduation: string;
}

interface PersonData {
  personalId: string;
  avatar: string;
  name: string;
  fullName: string;
  idCard: string;
  examNumber: number;
  root: string;
  rootId: string;
  rootShortName: string;
  child1: string;
  child1Id: string;
  child1ShortName: string;
  child2: string | null;
  child2Id: string | null;
  child2ShortName: string | null;
  child3: string | null;
  child3Id: string | null;
  child3ShortName: string | null;
  child4: string | null;
  child4Id: string | null;
  child4ShortName: string | null;
  node: number;
  nodeName: string;
  nodeId: string;
  nodeShortName: string;
  orgRevisionId: string;
  positionId: string;
  posMasterNo: number;
  positionName: string;
  positionField: string;
  posTypeId: string;
  posTypeName: string;
  posLevelId: string;
  posLevelName: string;
  positionCandidate: string;
  positionCandidateId: string;
  reportingDate: string;
  bmaOfficer: string;
  statusId: string;
  draft: string;
  typeCommand: string;
  posTypeCandidateId: string | null;
  posLevelCandidateId: string | null;
  posmasterId: string;
  statusNameCheck: string;
  deferment: boolean;
  statusName: string;
  organizationName: string;
  id: string;
}

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 TabPermissions {
  isEdit: boolean;
  isView: boolean;
}

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

interface MainData {
  amount?: number;
  amountOld: number;
  child1: string;
  child1Id: string;
  child1Old: string;
  child1OldId: string;
  child1ShortName: string;
  child1ShortNameOld: string;
  child2: string;
  child2Id: string;
  child2Old: string;
  child2OldId: string;
  child2ShortName: string;
  child2ShortNameOld: string;
  child3: string;
  child3Id: string;
  child3Old: string;
  child3OldId: string;
  child3ShortName: null;
  child3ShortNameOld: string;
  child4: string;
  child4Id: string;
  child4Old: string;
  child4OldId: string;
  child4ShortName: string;
  child4ShortNameOld: string;
  createdAt: string;
  dateOfBirth: string;
  educationOld: string;
  firstName: string;
  id: string;
  lastName: string;
  node: string;
  nodeId: string;
  nodeName: string;
  nodeNameOld: string;
  nodeOld: number;
  nodeOldId: string;
  nodeShortName: string;
  nodeShortNameOld: string;
  orgRevisionId: string;
  organizationOld: string;
  organizationPositionOld: string;
  posLevelId: string;
  posLevelName: string;
  posLevelNameOld: string;
  posLevelOldId: string;
  posMasterNo: number;
  posMasterNoOld: number;
  posTypeId: string;
  posTypeName: string;
  posTypeNameOld: string;
  posTypeOldId: string;
  position: string;
  positionDate: Date;
  positionField: string;
  positionId: string;
  positionLevelOld: string;
  positionNumberOld: string;
  positionOld: string;
  positionTypeOld: string;
  prefix: string;
  profileId: string;
  reason: string;
  reportingDate: string;
  root: string;
  rootOld: string;
  rootOldId: string;
  rootShortName: string;
  rootShortNameOld: string;
  salary: number;
  status: string;
  typeCommand: string;
}

export type {
  DataOption,
  DataOptionInsignia,
  treeTab,
  InformationOps,
  AddressOps,
  Pagination,
  EduOps,
  DataOption1,
  InsigniaOps,
  CheckboxItem,
  Property,
  PointExam,
  Education,
  Family,
  Address,
  optionData,
  Certificate,
  Assign,
  AddressData,
  DataProfile,
  tableType,
  ListDataText,
  ListMenu,
  DataEducation,
  PersonData,
  AppointTopic,
  AppointTopicMain,
  DataPermissions,
  TabPermissions,
  MainData,
};

export { AddressDataDefualt, FamilyDataDefualt };
