/**
 * 날짜 문자열을 Date 객체로 변환
 * @param value - 변환할 값
 * @returns Date 객체 또는 null
 */
export function parseDate(value: any): Date | null {
    if (value === null || value === undefined || value === '') {
        return null;
    }

    // 이미 Date 객체인 경우
    if (value instanceof Date) {
        return isNaN(value.getTime()) ? null : value;
    }

    // 숫자인 경우 (엑셀 날짜 시리얼 번호)
    if (typeof value === 'number') {
        // Excel 날짜는 1900-01-01부터의 일수
        // 하지만 XLSX 라이브러리가 이미 변환해줄 수 있으므로 일반 Date로 처리
        const date = new Date(value);
        return isNaN(date.getTime()) ? null : date;
    }

    // 문자열인 경우
    if (typeof value === 'string') {
        const trimmed = value.trim();
        if (trimmed === '') {
        return null;
    }

    // 다양한 날짜 형식 시도
    // YYYY-MM-DD, YYYY/MM/DD, YYYYMMDD 등
    const date = new Date(trimmed);
        if (!isNaN(date.getTime())) {
        return date;
    }

    // YYYYMMDD 형식 처리
    if (/^\d{8}$/.test(trimmed)) {
        const year = parseInt(trimmed.substring(0, 4), 10);
        const month = parseInt(trimmed.substring(4, 6), 10) - 1; // 월은 0부터 시작
        const day = parseInt(trimmed.substring(6, 8), 10);
        const date = new Date(year, month, day);
        return isNaN(date.getTime()) ? null : date;
    }
}

return null;
}

/**
 * 숫자 문자열을 숫자로 변환
 * @param value - 변환할 값
 * @returns 숫자 또는 null
 */
export function parseNumber(value: any): number | null {
    if (value === null || value === undefined || value === '') {
        return null;
    }

    if (typeof value === 'number') {
        return isNaN(value) ? null : value;
    }

    if (typeof value === 'string') {
        const trimmed = value.trim();
        if (trimmed === '') {
            return null;
        }
        const parsed = parseFloat(trimmed);
        return isNaN(parsed) ? null : parsed;
    }

    return null;
}