interface Users {
  email: string;
  firstName: string;
  id: string;
  lastName: string;
  username: string;
  roles: Roles[];
}

interface Roles {
  createdAt: string;
  createdFullName: string;
  createdUserId: string;
  id: string;
  lastUpdateFullName: string;
  lastUpdateUserId: string;
  lastUpdatedAt: string;
  roleDescription: string;
  name: string;
}

interface NodeTree {
  labelName: string;
  orgCode: string;
  orgLevel: number;
  orgName: string;
  orgRevisionId: string;
  orgRootName: string;
  orgTreeCode: string;
  orgTreeFax: string;
  orgTreeId: string;
  orgTreeName: string;
  orgTreeOrder: number;
  orgTreePhoneEx: string;
  orgTreePhoneIn: string;
  orgTreeRank: string;
  orgTreeRankSub: string | null;
  orgTreeShortName: string;
  responsibility: string | null;
  totalPosition: number;
  totalPositionCurrentUse: number;
  totalPositionCurrentVacant: number;
  totalPositionNextUse: number;
  totalPositionNextVacant: number;
  totalRootPosition: number;
  totalRootPositionCurrentUse: number;
  totalRootPositionCurrentVacant: number;
  totalRootPositionNextUse: number;
  totalRootPositionNextVacant: number;
  children: NodeTree[];
  isOfficer: boolean;
  orgRootDnaId: string;
  orgChild1DnaId: string;
  orgChild2DnaId: string;
  orgChild3DnaId: string;
  orgChild4DnaId: string;
}

interface PosMaster {
  fullNameCurrentHolder: null | string;
  fullNameNextHolder: string;
  profileIdCurrentHolder: string;
  profileIdNextHolder: string;
  id: string;
  isSit: boolean;
  isSpecial: boolean;
  orgChild1Id: null | string;
  orgChild2Id: null | string;
  orgChild3Id: null | string;
  orgChild4Id: null | string;
  orgRootId: string;
  orgShortname: string;
  posExecutiveId: string;
  posExecutiveName: string;
  posLevelId: string;
  posLevelName: string;
  posMasterNo: 1;
  posMasterNoPrefix: null | string;
  posMasterNoSuffix: null | string;
  posTypeId: string;
  posTypeName: string;
  positionArea: string;
  positionExecutiveField: string;
  positionField: string;
  positionIsSelected: boolean;
  positionName: string;
  profilePosition: string;
  profilePoslevel: null | string;
  profilePostype: null | string;
  reason: null | string;
  positions: Position[];
  assignId: string[];
  isDirector?: boolean;
}

interface Position {
  id: string;
  isSpecial: boolean;
  posExecutiveId: string;
  posExecutiveName: string;
  posLevelId: string;
  posLevelName: string;
  posTypeId: string;
  posTypeName: string;
  positionArea: string;
  positionExecutiveField: string;
  positionField: string;
  positionIsSelected: boolean;
  positionName: string;
}

interface SysList {
  id: string;
  order: number;
  parentId: string;
  sysDescription: string;
  sysName: string;
  children: SysList[];
}

interface Profile {
  birthDate: string;
  citizenId: string;
  educationDegree: string;
  email: string;
  firstName: string;
  id: string;
  lastName: string;
  name: string;
  organization: string;
  phone: string;
  posLevelId: string;
  posLevelName: string;
  posMasterNo: number;
  posNo: string;
  posTypeId: string;
  posTypeName: string;
  position: string;
  positionLevel: string;
  positionLevelName: string;
  positionType: string;
  positionTypeName: string;
  prefix: string;
  rank: string;
  salary: number;
}

interface CommandSysAssign {
  assgins: DataAssgins[];
  id: "REGISTRY";
  sysName: "ทะเบียนประวัติ";
}

interface DataAssgins {
  description: "เงินเดือนข้าราชการ";
  id: "00942120-9787-43a1-934a-e146e0618622";
  name: "เงินเดือนข้าราชการ";
}

export type {
  Users,
  Roles,
  NodeTree,
  PosMaster,
  Position,
  SysList,
  Profile,
  CommandSysAssign,
};
