interface Pagination {
  rowsPerPage: number;
}

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

interface DataOrgRevision {
  id: string;
  name: string;
  orgRevisionCreatedAt: string;
}

interface DataDocument {
  name: string;
  val: string;
}

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

interface FormDataAgency {
  orgName: string;
  orgShortName: string;
  orgCode: string;
  orgPhoneEx: string;
  orgPhoneIn: string;
  orgFax: string;
  orgLevel: string;
  orgLevelSub: string;
  responsibility: string;
  isOfficer?: boolean;
  isDeputy?: boolean;
  isInformation?: boolean;
  isCommission?: boolean;
  misId: string;
  DEPARTMENT_CODE: string;
  DIVISION_CODE: string;
  SECTION_CODE: string;
  JOB_CODE: string;
}

interface FormDataPosition {
  shortName: string;
  prefixNo: string;
  positionNo: string;
  suffixNo: string;
  reason?: string;
  isDirector?: boolean;
  isOfficer?: boolean;
  isStaff?: boolean;
  positionSign?: string;
}

interface FormDataNewStructure {
  orgRevisionId: string;
  orgRevisionName: string;
  typeDraft: string;
  remark: string;
}

interface FormAgencyRef {
  orgName: object | null;
  orgShortName: object | null;
  orgCode: object | null;
  // orgPhoneEx: object | null;
  // orgPhoneIn: object | null;
  // orgFax: object | null;
  orgLevel: object | null;
  [key: string]: any;
}

interface FormPositionRef {
  prefixNo: object | null;
  positionNo: object | null;
  [key: string]: any;
}

interface FormDateTimeRef {
  dateTime: object | null;
  [key: string]: any;
}

interface FormNewStructureRef {
  orgRevisionName: object | null;
  orgRevisionId: object | null;
  type: object | null;
  [key: string]: any;
}

interface HistoryType {
  orgRevisionId: string;
  orgRevisionName: string;
  orgRevisionIsCurrent: boolean;
  orgRevisionIsDraft: boolean;
  orgRevisionCreatedAt: Date | string;
}
interface HistoryPostType {
  id: string;
  name: string;
  lastUpdatedAt: Date;
  orgRevisionName: string;
}

interface FormPositionSelect {
  positionId: string;
  positionName: string;
  positionField: string;
  positionType: string;
  positionLevel: string;
  positionExecutive: string;
  positionExecutiveField: string;
  positionArea: string;
}

interface FormPositionSelectRef {
  positionName: object | null;
  positionField: object | null;
  positionType: object | null;
  positionLevel: object | null;
  positionExecutive: object | null;
  positionExecutiveField: object | null;
  positionArea: object | null;
  [key: string]: any;
}

interface RowDetailPositions {
  id: string | null;
  positionId: string;
  positionName: string;
  positionField: string;
  positionType: string;
  positionLevel: string;
  positionExecutive: string;
  positionExecutiveField: string;
  positionArea: string;
  posTypeId: string;
  posLevelId: string;
  posExecutiveId: string;
  isSpecial: boolean;
  positionIsSelected: string;
  isNew?: boolean;
}

interface DataOption2 {
  id: string;
  name: string;
  note?: string;
  level?: number;
}

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

interface UploadType {
  id: string;
  fileName: string;
  fileSize: number;
  fileType: string;
  detail: string;
}

export type {
  Pagination,
  DataOption,
  DataOption2,
  FormDataAgency,
  FormDataPosition,
  FormAgencyRef,
  FormPositionRef,
  FormDateTimeRef,
  FormDataNewStructure,
  FormNewStructureRef,
  HistoryType,
  ListMenu,
  FormPositionSelect,
  RowDetailPositions,
  HistoryPostType,
  FormPositionSelectRef,
  NewPagination,
  DataDocument,
  DataOrgRevision,
  UploadType,
};
