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;
}

interface FormAddPerson {
  birthDate: Date | null;
  rank: string;
  prefix: string;
  firstName: string;
  lastName: string;
  citizenId: string;
  position: string;
  posTypeId: string;
  posLevelId: string;
}

interface MyObjectRef {
  prefix: object | null;
  firstName: object | null;
  lastName: object | null;
  citizenId: object | null;
  position: object | null;
  posTypeId: object | null;
  posLevelId: object | null;

  [key: string]: any;
}

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

interface QueryParams {
  page: number;
  pageSize: number;
  isProbation?: boolean;
  isRetire?: boolean;
  type?: string;
  node?: number | string | null | undefined;
  nodeId?: string;
  isAll?: boolean;
}

interface FormChangeName {
  profileId: string;
  prefixId: string | null | undefined;
  prefix: string | null | undefined;
  firstName: string | null | undefined;
  lastName: string | null | undefined;
  status: string | null | undefined;
  documentId: string | null | undefined;
}

interface FormDataIDP {
  topic: string;
  developmentProjects: string[];
  reasonDevelopment70: string;
  reasonDevelopment20: string;
  reasonDevelopment10: string;
  developmentTarget: string;
  developmentResults: string;
  developmentReport: string;
  status: string;
  reason: string;
  createdFullName?: string;
  createdAt?: Date | null;
}

export type {
  FormFilter,
  FormAddPerson,
  MyObjectRef,
  DataNodeData,
  QueryParams,
  FormChangeName,
  FormDataIDP,
};
