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

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

interface AbilityRows {
  id: string;
  createdAt: string;
  createdUserId: string;
  lastUpdatedAt: string;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  profileId: string;
  remark: string;
  detail: string;
  reference: string;
  dateStart: string | null;
  dateEnd: string | null;
  field: string;
  profileEmployeeId: string | null;
}

interface EducationProfile {
  id: string;
  createdAt: string;
  createdUserId: string;
  lastUpdatedAt: string;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  profileId: string;
  country: string;
  degree: string;
  duration: string;
  durationYear: number | null;
  field: string;
  finishDate: Date | null;
  fundName: string;
  gpa: string;
  institute: string;
  other: string;
  startDate: Date | null;
  endDate: Date | null;
  educationLevel: string;
  educationLevelId: string;
  positionPath: string;
  note: string;
  positionPathId: string;
  isDate: boolean;
  isEducation: boolean;
  profileEmployeeId: string | null;
}

interface ProfileAppointment {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  profileId: string;
  profileEmployeeId: string | null;
  dateAppoint: Date | null;
  dateStart: Date | null;
  govAgeAbsent: number;
  govAgePlus: number;
  reasonSameDate: string;
}

interface GovAge {
  year: number;
  month: number;
  day: number;
}

interface FormDataGovernment {
  org: string;
  positionField: string;
  position: string;
  posLevel: string | null;
  posMasterNo: string;
  posType: string | null;
  posExecutive: string | null;
  positionArea: string | null;
  positionExecutiveField: string | null;
  dateLeave: Date | null;
  dateRetireLaw: Date | null;
  govAge: GovAge;
  dateAppoint: Date | null;
  dateStart: Date | null;
  govAgeAbsent: number;
  govAgePlus: number;
  reasonSameDate: string;
}

interface DisciplineDetail {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  date: Date | null;
  profileId: string;
  profileEmployeeId: string | null;
  level: string;
  detail: string;
  refCommandDate: Date | null;
  refCommandNo: string;
  unStigma: string;
}

interface LeaveType {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  name: string;
  code: string;
  limit: number;
}

interface LeaveFormType {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  profileId: string;
  profileEmployeeId: string | null;
  leaveTypeId: string;
  dateLeaveStart: Date | null;
  dateLeaveEnd: Date | null;
  leaveDays: number;
  leaveCount: number;
  totalLeave: number;
  status: string;
  reason: string;
  leaveType: LeaveType;
}

interface DutyFormType {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  profileId: string;
  profileEmployeeId: string | null;
  dateStart: Date | null;
  dateEnd: Date | null;
  detail: string;
  reference: string;
  refCommandDate: Date | null;
  refCommandNo: string;
}

interface SalaryFormType {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  profileId: string;
  profileEmployeeId: string | null;
  date: Date | null;
  posNo: string;
  position: string;
  positionLine: string | null;
  positionPathSide: string | null;
  positionExecutive: string | null;
  positionType: string;
  positionLevel: string;
  amount: number;
  positionSalaryAmount: number;
  mouthSalaryAmount: number;
  refCommandNo: string | null;
  templateDoc: string;
  order: number;
  commandType: string;
}

interface NopaidFormType {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  profileId: string;
  profileEmployeeId: string | null;
  date: Date | null;
  detail: string;
  reference: string;
  refCommandDate: Date | null;
  refCommandNo: string;
}

interface CertificateDetail {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  profileId: string;
  profileEmployeeId: string | null;
  expireDate: Date | null;
  issueDate: Date | null;
  certificateNo: string;
  certificateType: string;
  issuer: string;
}

interface TrainingFormType {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  profileId: string;
  profileEmployeeId: string | null;
  startDate: Date | null;
  endDate: Date | null;
  numberOrder: string;
  topic: string;
  place: string;
  dateOrder: Date | null;
  department: string;
  duration: string;
  name: string;
  yearly: number;
  isDate: boolean;
}

interface InsigniaType {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  name: string;
  isActive: boolean;
}

interface Insignia {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  name: string;
  shortName: string;
  level: number;
  isActive: boolean;
  note: string | null;
  insigniaTypeId: string;
  insigniaType: InsigniaType;
}

interface InsigniaFormType {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  profileId: string;
  profileEmployeeId: string | null;
  year: number;
  no: string;
  volume: string;
  section: string;
  page: string;
  receiveDate: Date | null;
  dateAnnounce: Date | null;
  issue: string;
  volumeNo: string;
  refCommandDate: Date | null;
  refCommandNo: string;
  note: string;
  insigniaId: string;
  insignia: Insignia;
}

interface HonorFormData {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  profileId: string;
  profileEmployeeId: string | null;
  detail: string;
  issueDate: Date | null;
  issuer: string;
  refCommandDate: Date | null;
  refCommandNo: string;
  isDate: boolean;
}

interface AssessmentsFormType {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  profileId: string;
  profileEmployeeId: string | null;
  name: string;
  date: Date | null;
  point1: number;
  point1Total: number;
  point2: number;
  point2Total: number;
  pointSum: number;
  pointSumTotal: number;
}

interface OtherFormType {
  id: string;
  createdAt: Date | null;
  createdUserId: string;
  lastUpdatedAt: Date | null;
  lastUpdateUserId: string;
  createdFullName: string;
  lastUpdateFullName: string;
  profileId: string;
  profileEmployeeId: string | null;
  detail: string;
  date: Date | null;
}

interface FileFormType {
  id: string;
  pathName: string;
  fileName: string;
}

interface CardDataPos {
  label: string;
  data?: Data[];
}

interface Data {
  name: string;
  time: string;
}

export type {
  DataOption,
  NewPagination,
  AbilityRows,
  EducationProfile,
  ProfileAppointment,
  FormDataGovernment,
  DisciplineDetail,
  LeaveFormType,
  DutyFormType,
  SalaryFormType,
  NopaidFormType,
  CertificateDetail,
  TrainingFormType,
  InsigniaFormType,
  HonorFormData,
  AssessmentsFormType,
  OtherFormType,
  FileFormType,
  CardDataPos,
};
