import { type ClassValue, clsx } from "clsx" import { twMerge } from "tailwind-merge" import { PUBLIC_BASE_URL } from "./api" import { normalizeProductImage } from "./catalog" import { apiStatus } from "./api" export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) } // Функции для форматирования // Форматировать дату export function formatDate(dateString: string): string { if (!dateString) return 'Не указано'; try { const date = new Date(dateString); // Проверка на валидность даты if (isNaN(date.getTime())) { return 'Некорректная дата'; } return new Intl.DateTimeFormat('ru-RU', { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit' }).format(date); } catch (error) { console.error('Ошибка при форматировании даты:', error); return 'Ошибка форматирования'; } } // Форматировать цену export function formatPrice(price: number | null | undefined): string { if (price === null || price === undefined) { return '0 ₽'; } try { return price.toLocaleString('ru-RU', { style: 'currency', currency: 'RUB', minimumFractionDigits: 0, maximumFractionDigits: 0 }); } catch (error) { console.error('Ошибка при форматировании цены:', error); return `${price} ₽`; } } // Алиас для обратной совместимости export const formatCurrency = formatPrice; // Получить правильный URL изображения с журналированием export const getProperImageUrl = (imageUrl: string | null | undefined): string => { const normalizedUrl = normalizeProductImage(imageUrl); if (apiStatus.debugMode) { // console.log(`Обработка URL изображения: ${imageUrl} -> ${normalizedUrl}`); } return normalizedUrl; };