interface PersonInformation {
  assessments: any[];
  birthDate: string;
  certificates: any[];
  educations: EducationForm[];
  experience: null | any;
  fullName: string;
  govAge: string;
  isEducationalQft: boolean;
  isGovermantServiceHtr: boolean;
  isHaveMinPeriodOrHoldPos: boolean;
  isHaveProLicense: boolean;
  isHaveSpecificQft: boolean;
  isMinPeriodOfTenure: boolean;
  isOperatingExp: boolean;
  oc: string;
  posNo: string;
  position: string;
  positionLevel: string;
  prefix: string;
  salaries: any[];
  salary: string;
  trainings: any[];
  type: string;
}

interface FormSpec {
  isEducationalQft: boolean;
  isGovermantServiceHtr: boolean;
  isOperatingExp: boolean;
  isMinPeriodOfTenure: boolean;
  isHaveSpecificQft: boolean;
  isHaveProLicense: boolean;
  isHaveMinPeriodOrHoldPos: boolean;
  [key: string]: any;
}

interface FormCommand {
  commanderFullname: string;
  commanderPosition: string;
  commanderPositionOld: string;
  commanderOrgOld: string;
  commanderOrg: string;
  commanderAboveFullname: string;
  commanderAbovePosition: string;
  commanderAbovePositionOld: string;
  commanderAboveOrgOld: string;
  commanderAboveOrg: string;
  author: string;
  subject: string[];
  assignedPosition: string;
}

interface FormCommandSe {
  commanderFullname: string;
  commanderPosition: string;
  commanderAboveFullname: string;
  commanderAbovePosition: string;
  author: string;
  subject: string;
}

interface FormData {
  id: string;
  commanderFullname: string;
  commanderPosition: string;
  commanderAboveFullname: string;
  commanderAbovePosition: string;
  author: string;
  subject: string;
}

interface FormCommandRef {
  commanderFullname: object | null;
  commanderPosition: object | null;
  commanderAboveFullname: object | null;
  commanderAbovePosition: object | null;
  fileEvaluation1: object | null;
  fileEvaluation2: object | null;
  fileEvaluation3: object | null;
  fileEvaluation4: object | null;
  fileEvaluation5: object | null;
  fileEvaluation6: object | null;
  performance: object | null;
  performanceOwner: object | null;

  [key: string]: any;
}

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

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

interface ListMenu {
  val: string;
  label: string;
  level: number;
  type: number;
}

interface FormRef {
  subject: object | null;
  author: object | null;
  commanderFullname: object | null;
  commanderPosition: object | null;
  commanderAboveFullname: object | null;
  commanderAbovePosition: object | null;
  [key: string]: any;
}

export type {
  PersonInformation,
  FormCommand,
  FormCommandRef,
  FormSpec,
  EducationForm,
  CertificatesForm,
  ListMenu,
  FormRef,
  FormData,
  FormCommandSe,
};
