/**
 * 날짜 관련 유틸리티 함수
 */

/**
 * 로컬 시간대 기준 YYYY-MM-DD 형식 반환
 *
 * 주의: toISOString()은 UTC 기준이므로 한국 시간대(UTC+9)에서
 * 오전 9시 이전에 사용하면 하루 전 날짜가 반환됨
 *
 * @example
 * // 2025-01-26 08:30 KST
 * new Date().toISOString().split('T')[0] // "2025-01-25" (잘못됨)
 * getLocalDateString(new Date())          // "2025-01-26" (정확함)
 */
export function getLocalDateString(date: Date = new Date()): string {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
}

/**
 * 오늘 날짜를 YYYY-MM-DD 형식으로 반환 (로컬 시간대 기준)
 */
export function getTodayString(): string {
  return getLocalDateString(new Date());
}

/**
 * N일 후 날짜를 YYYY-MM-DD 형식으로 반환 (로컬 시간대 기준)
 */
export function getDateAfterDays(days: number): string {
  const date = new Date();
  date.setDate(date.getDate() + days);
  return getLocalDateString(date);
}

/**
 * API 날짜 문자열을 HTML date input용 YYYY-MM-DD 형식으로 변환
 * 지원 형식: ISO 8601, datetime string, date only
 */
export function formatDateForInput(dateStr: string | null | undefined): string {
  if (!dateStr) return '';

  // 이미 YYYY-MM-DD 형식인 경우
  if (/^\d{4}-\d{2}-\d{2}$/.test(dateStr)) {
    return dateStr;
  }

  // ISO 8601 또는 datetime 형식 (2025-01-06T00:00:00.000Z, 2025-01-06 00:00:00)
  const date = new Date(dateStr);
  if (isNaN(date.getTime())) {
    return ''; // 유효하지 않은 날짜
  }

  // 로컬 시간대 기준 YYYY-MM-DD 형식으로 변환
  return getLocalDateString(date);
}