
/**
 * 트랜잭션 날짜 관련 유틸리티
 */
import { formatISO } from 'date-fns';

/**
 * 다양한 형식의 날짜 문자열을 ISO 형식으로 변환
 */
export const normalizeDate = (dateStr: string): string => {
  try {
    // 이미 ISO 형식인 경우 그대로 반환
    if (dateStr.match(/^\d{4}-\d{2}-\d{2}T/)) {
      return dateStr;
    }

    // "오늘, 시간" 형식 처리
    if (dateStr.includes('오늘')) {
      const today = new Date();
      
      // 시간 추출 시도
      const timeMatch = dateStr.match(/(\d{1,2}):(\d{2})/);
      if (timeMatch) {
        const hours = parseInt(timeMatch[1], 10);
        const minutes = parseInt(timeMatch[2], 10);
        today.setHours(hours, minutes, 0, 0);
      }
      
      return formatISO(today);
    }
    
    // "어제, 시간" 형식 처리
    if (dateStr.includes('어제')) {
      const yesterday = new Date();
      yesterday.setDate(yesterday.getDate() - 1);
      
      // 시간 추출 시도
      const timeMatch = dateStr.match(/(\d{1,2}):(\d{2})/);
      if (timeMatch) {
        const hours = parseInt(timeMatch[1], 10);
        const minutes = parseInt(timeMatch[2], 10);
        yesterday.setHours(hours, minutes, 0, 0);
      }
      
      return formatISO(yesterday);
    }
    
    // 일반 날짜 문자열은 그대로 Date 객체로 변환 시도
    const date = new Date(dateStr);
    if (!isNaN(date.getTime())) {
      return formatISO(date);
    }
    
    // 변환 실패 시 현재 시간 반환
    console.warn(`날짜 변환 오류: "${dateStr}"를 ISO 형식으로 변환할 수 없습니다.`);
    return formatISO(new Date());
  } catch (error) {
    console.error(`날짜 변환 오류: "${dateStr}"`, error);
    return formatISO(new Date());
  }
};

/**
 * ISO 형식의 날짜를 사용자 친화적 형식으로 변환
 */
export const formatDateForDisplay = (isoDateStr: string): string => {
  try {
    const date = new Date(isoDateStr);
    
    // 유효한 날짜인지 확인
    if (isNaN(date.getTime())) {
      return isoDateStr; // 변환 실패 시 원본 반환
    }
    
    const now = new Date();
    const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
    const yesterday = new Date(today);
    yesterday.setDate(yesterday.getDate() - 1);
    
    const dateOnly = new Date(date.getFullYear(), date.getMonth(), date.getDate());
    
    // 시간 포맷
    const hours = date.getHours();
    const minutes = date.getMinutes();
    const formattedTime = `${hours}:${minutes.toString().padStart(2, '0')}`;
    
    // 오늘인 경우
    if (dateOnly.getTime() === today.getTime()) {
      return `오늘, ${formattedTime}`;
    }
    
    // 어제인 경우
    if (dateOnly.getTime() === yesterday.getTime()) {
      return `어제, ${formattedTime}`;
    }
    
    // 그 외의 경우
    const year = date.getFullYear();
    const month = date.getMonth() + 1;
    const day = date.getDate();
    
    return `${year}/${month.toString().padStart(2, '0')}/${day.toString().padStart(2, '0')}, ${formattedTime}`;
  } catch (error) {
    console.error('날짜 표시 형식 변환 오류:', error);
    return isoDateStr; // 오류 시 원본 반환
  }
};
