/**
 * 날짜 관련 유틸리티 함수
 * dayjs를 사용하여 KST(한국 표준시) 기준으로 날짜 처리
 */
import dayjs from "dayjs";
import utc from "dayjs/plugin/utc";
import timezone from "dayjs/plugin/timezone";

// 플러그인 확장
dayjs.extend(utc);
dayjs.extend(timezone);

// 기본 타임존 설정
const KST = "Asia/Seoul";

/**
 * KST 기준 오늘 날짜 (YYYY-MM-DD)
 * @returns {string} 오늘 날짜 문자열
 */
export const getTodayKST = () => {
  return dayjs().tz(KST).format("YYYY-MM-DD");
};

/**
 * KST 기준 현재 시각
 * @returns {dayjs.Dayjs} dayjs 객체
 */
export const nowKST = () => {
  return dayjs().tz(KST);
};

/**
 * 날짜 문자열 포맷팅
 * @param {string|Date} date - 날짜
 * @param {string} format - 포맷 (기본: 'YYYY-MM-DD')
 * @returns {string} 포맷된 날짜 문자열
 */
export const formatDate = (date, format = "YYYY-MM-DD") => {
  return dayjs(date).tz(KST).format(format);
};

/**
 * 날짜에서 년, 월, 일, 요일 추출
 * @param {string|Date} date - 날짜
 * @returns {object} { year, month, day, weekday }
 */
export const parseDateKST = (date) => {
  const d = dayjs(date).tz(KST);
  const weekdays = ["일", "월", "화", "수", "목", "금", "토"];
  return {
    year: d.year(),
    month: d.month() + 1,
    day: d.date(),
    weekday: weekdays[d.day()],
  };
};

/**
 * 두 날짜 비교 (같은 날인지)
 * @param {string|Date} date1
 * @param {string|Date} date2
 * @returns {boolean}
 */
export const isSameDay = (date1, date2) => {
  return (
    dayjs(date1).tz(KST).format("YYYY-MM-DD") ===
    dayjs(date2).tz(KST).format("YYYY-MM-DD")
  );
};

/**
 * 날짜가 오늘인지 확인
 * @param {string|Date} date
 * @returns {boolean}
 */
export const isToday = (date) => {
  return isSameDay(date, dayjs());
};

// dayjs 인스턴스도 export (고급 사용용)
export { dayjs };
