import { Product } from './types'; import { clsx, type ClassValue } from 'clsx'; import { twMerge } from 'tailwind-merge'; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } export const formatCurrency = (value: number) => { return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: 0, maximumFractionDigits: 0, }).format(value); }; export const formatPercent = (value: number) => { return new Intl.NumberFormat('en-US', { style: 'percent', minimumFractionDigits: 1, maximumFractionDigits: 1, }).format(value); }; export const calculateProductMetrics = (product: Product, includeCOGS: boolean) => { const incentives = product.deals + product.promos; const cogsDeduction = includeCOGS ? product.cogs : 0; const totalDeductions = product.ppcSpend + incentives + product.chargebacks + cogsDeduction; const netMargin = product.grossSales - totalDeductions; const marginPercent = product.grossSales > 0 ? netMargin / product.grossSales : 0; const acos = product.grossSales > 0 ? product.ppcSpend / product.grossSales : 0; const chargebackIncrease = product.chargebacksPrevMonth > 0 ? (product.chargebacks - product.chargebacksPrevMonth) / product.chargebacksPrevMonth : 0; const hasChargebackAnomaly = chargebackIncrease > 0.15; return { incentives, totalDeductions, netMargin, marginPercent, acos, chargebackIncrease, hasChargebackAnomaly }; };