import type { DateRange, OrderData } from '../types.ts'; const SIZE_SUFFIX_PATTERN = /\s+-\s+(?:(?:PP|P|M|G|GG|XG|XGG|EG|EGG|EXG|U|UNICO|ÚNICO|\d{2})(?:\/(?:PP|P|M|G|GG|XG|XGG|EG|EGG|EXG|U|UNICO|ÚNICO|\d{2}))*)$/i; export const parseOrderDate = (dateStr: string): Date => { if (!dateStr) return new Date(0); if (dateStr.includes('T')) return new Date(dateStr); const parts = dateStr.split(/[-/]/); if (parts.length === 3) { if (parts[0].length === 4) { return new Date(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2])); } return new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0])); } const fallback = new Date(dateStr); return Number.isNaN(fallback.getTime()) ? new Date(0) : fallback; }; export const getBaseProductName = (description: string): string => { const productName = description.trim(); if (productName.toLocaleUpperCase('pt-BR').startsWith('ETIQUETA')) { return productName; } return productName.split(' TAMANHO')[0].replace(SIZE_SUFFIX_PATTERN, '').trim(); }; export const getClientDisplayName = (order: OrderData): string => { return order.Nome_Cliente || 'Cliente Desconhecido'; }; export const getOrderCustomerKey = (order: OrderData): string => { return order.Fone_Cliente || `name:${getClientDisplayName(order)}`; }; export const isOrderInDateRange = (order: OrderData, dateRange: DateRange): boolean => { const orderDate = parseOrderDate(order.Data_Pedido); return orderDate >= dateRange.start && orderDate <= dateRange.end; }; export const filterOrdersByDateRange = (orders: OrderData[], dateRange: DateRange): OrderData[] => { return orders.filter(order => isOrderInDateRange(order, dateRange)); }; export const getOrderItemRevenue = (order: OrderData): number => { return order.Quantidade * order.Valor_Unitario; };