import moment from "moment";

/**
 * คำนวณหน้าที่จะแสดงหลังจากลบข้อมูล
 *
 * @param page หน้าปัจจุบัน
 * @param maxPage หน้าสุดท้าย
 * @param currentPageItems จำนวนข้อมูลในหน้าปัจจุบัน
 * @returns หน้าที่ควรแสดง
 */
export async function updateCurrentPage(
  page: number,
  maxPage: number,
  total: number
) {
  // ถ้าหน้าปัจจุบันไม่ใช่หน้าแรก และเป็นหน้าสุดท้าย และมีข้อมูลเหลือ 1 รายการ ให้กลับไปหน้าก่อนหน้า
  if (page > 1 && page === maxPage && total === 1) {
    return page - 1;
  }
  return page;
}

/**
 * คำนวณปีงบประมาณ
 *
 * @param date วันที่ปัจจุบัน
 * @returns ปีงบประมาณ
 */
export function calculateFiscalYear(date: Date) {
  const month = date.getMonth() + 1;
  return month >= 10 ? date.getFullYear() + 1 : date.getFullYear();
}

/**
 * คำนวณอายุจากวันเกิด
 * @param birthDate วันเกิด
 * @returns อายุในรูปแบบ ปี เดือน วัน หรือ ข้อความ "อายุเกิน 60 ปี" หรือ null หากวันเกิดเป็น null
 */
export function calculateAge(birthDate: Date | null) {
  if (!birthDate) return null;

  // .startOf('day') จะเซ็ตเวลาเป็น 00:00:00.000 ของวันนั้นๆ
  const birth = moment(birthDate).startOf("day");
  const now = moment().startOf("day");

  if (!birth.isValid()) return "Invalid Date";

  // คราวนี้การลบกันจะสนแค่ "วันที่" เท่านั้น
  const years = now.diff(birth, "years");
  birth.add(years, "years");

  const months = now.diff(birth, "months");
  birth.add(months, "months");

  const days = now.diff(birth, "days");

  if (years >= 60) {
    return "อายุเกิน 60 ปี";
  }

  return `${years} ปี ${months} เดือน ${days} วัน`;
}

/**
 * คืนค่าชื่อคอลัมน์ตามเงื่อนไข
 * @param col คอลัมน์
 * @param isAct สถานะรักษาการแทน
 * @returns ชื่อคอลัมน์
 */
export function getColumnLabel(col: any, isAct: boolean) {
  if (col.name === "posNo" && isAct) {
    return `${col.label}รักษาการแทน`;
  }
  return col.label;
}
