"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseDate = void 0;
const dayjs_1 = __importDefault(require("dayjs"));
const customParseFormat_1 = __importDefault(require("dayjs/plugin/customParseFormat"));
const utc_1 = __importDefault(require("dayjs/plugin/utc"));
const maskDate_1 = require("../maskDate");
dayjs_1.default.extend(customParseFormat_1.default);
dayjs_1.default.extend(utc_1.default);
/**
 * Токен маски UI → литерал формата `dayjs` (strict UTC).
 * В маске час — `hh`, в дате используются сутки 0–23 как в `formatDate` (UTC), поэтому `HH`.
 */
const maskElementToDayjs = {
    [maskDate_1.DateMaskElements.Day]: 'DD',
    [maskDate_1.DateMaskElements.Month]: 'MM',
    [maskDate_1.DateMaskElements.Year]: 'YYYY',
    [maskDate_1.DateMaskElements.Hour]: 'HH',
    [maskDate_1.DateMaskElements.Minute]: 'mm',
    [maskDate_1.DateMaskElements.Second]: 'ss',
};
const buildDayjsFormat = (mask, separator) => {
    const parts = mask.split(separator);
    const tokens = [];
    for (const part of parts) {
        const t = maskElementToDayjs[part];
        if (t == null) {
            return null;
        }
        tokens.push(t);
    }
    return tokens.join(separator);
};
/**
 * утилита конвертации строковой даты созданной по маске обратно в Date
 * Строгий разбор UTC через `dayjs` + `customParseFormat`; при невалидной строке — Invalid Date
 */
const parseDate = (date, mask, separator = '.') => {
    const dateArr = date.split(separator);
    const maskSplit = mask.split(separator);
    if (dateArr.length !== maskSplit.length) {
        return new Date(Number.NaN);
    }
    const format = buildDayjsFormat(mask, separator);
    if (format == null) {
        return new Date(Number.NaN);
    }
    const parsed = dayjs_1.default.utc(date, format, true);
    if (!parsed.isValid()) {
        return new Date(Number.NaN);
    }
    return parsed.toDate();
};
exports.parseDate = parseDate;
