interface ListLeave {
  id: string; //*Id การยื่นขอลา
  leaveTypeName: string; //Name ประเภทการลา
  leaveTypeId: string; //Id ประเภทการลา
  leaveStartDate: Date;
  leaveEndDate: Date;
  fullName: string; //คำนำหน้า ชื่อ นามสกุล คนขอลา
  dateSendLeave: Date | null; //วันที่ยื่นใบลา
  status: string; //สถานะการของลา
  leaveSubTypeName: string;
  leaveRange: string;
  leaveRangeEnd: string;
  isDelete: boolean; //ขอยกเลิกคำขอลา ถ้าเคยขอแล้วจะเป็น true ไม่เคยเป็น false
  hajjDayStatus: boolean;
}

interface ListLeaveTable {
  id: string;
  leaveTypeName: string;
  leaveTypeId: string;
  fullName: string;
  dateSendLeave: string | null;
  status: string;
  leaveSubTypeName: string;
  leaveRange: string;
  leaveRangeEnd: string;
  isDelete: boolean;
  hajjDayStatus: boolean;
}

interface FremDetail {
  id: string; //Id การยื่นขอลา
  leaveTypeName: string; // Name ประเภทการลา
  leaveTypeId: string; //Id ประเภทการลา
  fullname: string; //คำนำหน้า ชื่อ นามสกุล คนขอลา
  dateSendLeave: Date; // วันที่ยืนใบลา
  status: string; //สถานะการของลา
  leaveDateStart: Date; //วันเริ่มการลา
  leaveDateEnd: Date; //วันสิ้นสุดการลา
  leaveCount: string; //จำนวนวันลา
  leaveWrote: string; //เขียนที่
  leaveAddress: string; //สถานที่ติดต่อขณะลา
  leaveNumber: string; //หมายเลขที่ติดต่อขณะลา
  leaveDetail: string; //รายละเอียดการลา
  leaveDocument: string; //อัปโหลดเอกสารประกอบรายละเอียด
  leaveDraftDocument: string; //อัปโหลดแบบฟอร์มการลา
  leaveLastStart: Date; //ลาครั้งสุดท้ายในประเภทนั้น ๆ เริ่มเมื่อวันที่(ลาป่วย ลาคลอดบุตร และลากิจส่วนตัว)(Auto)
  leaveLastEnd: Date; //ลาครั้งสุดท้ายในประเภทนั้น ๆ สิ้นสุดเมื่อวันที่(ลาป่วย ลาคลอดบุตร และลากิจส่วนตัว)(Auto)
  leaveTotal: string; //จำนวนวันที่ลา(Auto)
  leavebirthDate: Date; //วันเดือนปีเกิด(Auto)
  leavegovernmentDate: Date; //วันที่เข้ารับราชการ(Auto)
  leaveSalary: number; //เงินเดือนปัจจุบัน(Auto)
  leaveSalaryText: string; //เงินเดือนปัจจุบัน(เขียนเป็นคำอ่าน)
  leaveTypeDay: string; //ประเภทการลาในวันนั้นเช่น
  wifeDayName: string; //ชื่อภรรยา(ลาไปช่วยเหลือภริยาที่คลอดบุตร)
  wifeDayDateBorn: Date; //วันที่คลอด(ลาไปช่วยเหลือภริยาที่คลอดบุตร)
  restDayOldTotal: number; //จำนวนวันลาพักผ่อนสะสม จากปีที่ผ่านมา(ลาพักผ่อน)(Auto)
  restDayCurrentTotal: number; //จำนวนวันลาพักผ่อนประจำปีปัจจุบัน(ลาพักผ่อน)(Auto)
  ordainDayStatus: string; //เคย/ไม่เคยบวช (ให้เลือก) (ลาอุปสมบท)
  ordainDayLocationName: string; //สถานที่บวช ชื่อวัด(ลาอุปสมบท)
  ordainDayLocationAddress: string; //สถานที่บวช ที่อยู่(ลาอุปสมบท)
  ordainDayLocationNumber: string; //สถานที่บวช หมายเลขโทรศัพท์(ลาอุปสมบท)
  ordainDayOrdination: Date; //สถานที่บวช วันอุปสมบท(ลาอุปสมบท)
  ordainDayBuddhistLentName: string; //สถานที่จำพรรษา ชื่อวัด(ลาอุปสมบท)
  ordainDayBuddhistLentAddress: string; //สถานที่จำพรรษา ที่อยู่(ลาอุปสมบท)
  hajjDayStatus: string; //เคย/ไม่เคยไปประกอบพิธีฮัจญ์ (ให้เลือก) (ลาประกอบพิธีฮัจญ์)
  absentDaySummon: string; //ได้รับหมายเรียกของ (ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล)
  absentDayLocation: string; //ที่ (ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล)
  absentDayRegistorDate: Date; //ลงวันที่ (ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล)
  absentDayGetIn: string; //ให้เข้ารับการ (ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล)
  absentDayAt: string; //ณ ที่ (ลาเข้ารับการตรวจเลือกหรือเข้ารับการเตรียมพล)
  studyDaySubject: string; //กรณีลาไปศึกษาต่อ ศึกษาวิชา (ลาไปศึกษา ฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน)
  studyDayDegreeLevel: string; //กรณีลาไปศึกษาต่อ ขั้นปริญญา (ลาไปศึกษา ฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน)
  studyDayUniversityName: string; //กรณีลาไปศึกษาต่อ ชื่อสถานศึกษา (ลาไปศึกษา ฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน)
  studyDayTrainingSubject: string; //กรณีลาไปฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน ด้าน/หลักสูตร (ลาไปศึกษา ฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน)
  studyDayTrainingName: string; //กรณีลาไปฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน ณ สถานที่	(ลาไปศึกษา ฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน)
  studyDayCountry: string; //ประเทศ (ลาไปศึกษา ฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน)
  studyDayScholarship: string; //ด้วยทุน (ลาไปศึกษา ฝึกอบรม ปฏิบัติการวิจัย หรือดูงาน)
  coupleDayName: string; //ชื่อคู่สมรส (ลาติดตามคู่สมรส)
  coupleDayPosition: string; //ตำแหน่งคู่สมรส (ลาติดตามคู่สมรส)
  coupleDayLevel: string; //ระดับคู่สมรส (ลาติดตามคู่สมรส)
  coupleDayLevelCountry: string; //ไปปฏิบัติราชการ ณ ประเทศ (ลาติดตามคู่สมรส)
  coupleDayCountryHistory: string; //ประวัติ ประเทศ (ลาติดตามคู่สมรส)
  coupleDayTotalHistory: string; //ประวัติ เป็นเวลา กี่ปี กี่เดือน กี่วัน (ลาติดตามคู่สมรส)
  coupleDayStartDateHistory: Date; //ประวัติ ตั้งแต่วันที่ (ลาติดตามคู่สมรส)
  coupleDayEndDateHistory: Date; //ประวัติ ถึงวันที่ (ลาติดตามคู่สมรส)
  coupleDaySumTotalHistory: string; //ประวัติ ในกรณีลาติดต่อกับครั้งก่อน รวมทั้งนี้ด้วย เป็นเวลา กี่ปี กี่เดือน กี่วัน (ลาติดตามคู่สมรส)
  approveStep: string;
  dear: string;
  leaveRange: string;
  leaveRangeEnd: string;
  leaveSubTypeName: string;
}

interface FromCancelDetail {
  id: string; //*Id การยื่นขอลา
  leaveTypeName: String; //Name ประเภทการลา
  fullname: String; //คำนำหน้า ชื่อ นามสกุล คนขอลา
  status: String; //สถานะการของลา
  leaveDocDelete: string; //เอกสารการยกเลิกการลา
  leaveSubTypeName: string;
  leaveResonDelete: String; //เหตุผลการยกเลิกการลา
  leaveWrote: String; //เขียนที่
  leaveAddress: String; //สถานที่ติดต่อขณะลา
  leaveNumber: String; //หมายเลขที่ติดต่อขณะลา
  leaveDetail: String; //รายละเอียดการลา
  leaveTotal: number; //จำนวนวันที่ลา
  leaveStartDate?: Date; //วัน เดือน ปีเริ่มต้นลา
  leaveEndDate?: Date; //วัน เดือน ปีสิ้นสุดลา
  leaveDateStart?: Date;
  leaveDateEnd?: Date; //วัน เดือน ปีสิ้นสุดลา
  leaveRange?: string; //ช่วงการลา
  leaveRangeEnd?: string; //ช่วงการลา
  leaveDirectorComment?: string; //ความคิดเห็นของผู้บังคับบัญชา
}

interface FormDelete {
  writeAt: string;
  reason: string;
  doc: any;
}
interface FormDeleteRef {
  writeAt: object | null;
  reason: object | null;
  doc: object | null;
  [key: string]: any;
}

interface DataCalendar {
  dateSendLeave: Date;
  fullName: string;
  id: string;
  leaveEndDate: Date;
  leaveStartDate: Date;
  leaveTypeId: string;
  leaveTypeName: string;
  status: string;
  keycloakId: string;
}

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

interface FilterList {
  id: string;
  name: string | null;
  color: string;
}

export type {
  ListLeave,
  ListLeaveTable,
  FremDetail,
  FormDelete,
  FormDeleteRef,
  DataCalendar,
  LeaveType,
  FilterList,
  FromCancelDetail,
};
