interface Pagination {
  rowsPerPage: number;
}

interface DataOption {
  id: string;
  name: 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;
}

interface FormDataPosition {
  shortName: string;
  prefixNo: string;
  positionNo: string;
  suffixNo: string;
  reason: string;
}

interface FormDataNewStructure {
  orgRevisionId: string;
  orgRevisionName: string;
  typeDraft: 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;
  positionId: string;
  positionName: string;
  positionField: string;
  positionType: string;
  positionLevel: string;
  positionExecutive: string;
  positionExecutiveField: string;
  positionArea: string;
  posTypeId: string;
  posLevelId: string;
  posExecutiveId: string;
  isSpecial: boolean;
}

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

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