export const getDateInputLocaleFormat = (locale: string) => {
    const dateFormat = new Intl.DateTimeFormat(locale, { year: "numeric", month: "numeric", day: "numeric" })?.formatToParts()?.filter((part) => part.type !== "literal")?.map((part) => {
        if (["year", "relatedYear"].includes(part?.type as string)) {
            return "y";
        }
        if (["month"].includes(part?.type as string)) {
            return "m";
        }
        if (["day"].includes(part?.type as string)) {
            return "d";
        }
    });
    return [...new Set(dateFormat)]
}

/**
 * Преобразует дату из формата "YYYY-MM-DD" в локализованный формат с учетом региональных настроек.
 * Важно: функция ожидает дату в формате "YYYY-MM-DD" для корректной работы во всех часовых поясах.
 * 
 * @param dateString - Строка даты в формате "YYYY-MM-DD" (например, "2011-01-01")
 * @param locale - Код локали (например, "en", "ru")
 * @returns Отформатированная дата в соответствии с локальным форматом (например, "01.01.2011" для ru)
 * 
 * @example
 * formatDateToLocale("2011-01-01", "ru") // returns "01.01.2011"
 * formatDateToLocale("2011-01-01", "en") // returns "01.01.2011"
 */
export const formatDateToLocale = (dateString: string, locale: string): string => {
    // Разбираем дату из формата YYYY-MM-DD
    try {
        const [year, month, day] = dateString?.split(" ")?.[0]?.split('-')?.map(Number);
        // Создаем дату с явным указанием компонентов для избежания проблем с часовыми поясами
        const date = new Date(year, month - 1, day);


        const format = getDateInputLocaleFormat(locale);

        const parts = {
            y: date?.getFullYear(),
            m: String(date?.getMonth() + 1)?.padStart(2, '0'),
            d: String(date?.getDate())?.padStart(2, '0')
        };

        return format?.map(part => parts[part as keyof typeof parts])?.join('.');
    } catch (error) {
        console.error(error);
        console.error("Wrong date format: ", dateString);
        return "";
    }
}


