import type { Product } from './types'

export function formatPrice(value: number | null | undefined): string {
  if (value === null || value === undefined) return ''
  return value.toLocaleString('pt-BR', {
    style: 'currency',
    currency: 'BRL',
  })
}

export function formatPriceCompact(value: number): string {
  const str = value.toFixed(2).replace('.', ',')
  return str
}

export function getSavings(product: Product): number | null {
  if (!product.promotionalPrice) return null
  return product.price - product.promotionalPrice
}

export function getEffectivePrice(product: Product): number {
  return product.promotionalPrice ?? product.price
}

// Map category slug to gradient colors for product card backgrounds
export function getCategoryGradient(slug: string, color?: string | null): string {
  const gradients: Record<string, string> = {
    'corpo': 'from-amber-50 to-yellow-100',
    'pele': 'from-pink-50 to-rose-100',
    'maquiagem': 'from-purple-50 to-violet-100',
    'cabelos': 'from-cyan-50 to-sky-100',
    'perfumaria': 'from-red-50 to-rose-100',
    'uso-diario': 'from-emerald-50 to-green-100',
    'intimidade': 'from-red-50 to-orange-100',
    'infantil': 'from-pink-50 to-fuchsia-100',
    'casa': 'from-lime-50 to-green-100',
    'suplementos': 'from-sky-50 to-blue-100',
  }
  return gradients[slug] || 'from-gray-50 to-gray-100'
}

// Get category icon emoji/symbol for visual variety
export function getCategorySymbol(slug: string): string {
  const symbols: Record<string, string> = {
    'corpo': '✨',
    'pele': '💖',
    'maquiagem': '💄',
    'cabelos': '💨',
    'perfumaria': '🌸',
    'uso-diario': '☀️',
    'intimidade': '🛡️',
    'infantil': '👶',
    'casa': '🏠',
    'suplementos': '💊',
  }
  return symbols[slug] || '🛍️'
}

// Generate a product image placeholder based on product info
export function getProductImageStyle(product: Product): { bg: string; label: string } {
  const catSlug = product.category?.slug || 'corpo'
  const gradients: Record<string, string> = {
    'corpo': 'linear-gradient(135deg, #FEF3C7 0%, #FDE68A 100%)',
    'pele': 'linear-gradient(135deg, #FCE7F3 0%, #FBCFE8 100%)',
    'maquiagem': 'linear-gradient(135deg, #F3E8FF 0%, #E9D5FF 100%)',
    'cabelos': 'linear-gradient(135deg, #CFFAFE 0%, #A5F3FC 100%)',
    'perfumaria': 'linear-gradient(135deg, #FEE2E2 0%, #FECACA 100%)',
    'uso-diario': 'linear-gradient(135deg, #D1FAE5 0%, #A7F3D0 100%)',
    'intimidade': 'linear-gradient(135deg, #FEE2E2 0%, #FED7AA 100%)',
    'infantil': 'linear-gradient(135deg, #FCE7F3 0%, #F5D0FE 100%)',
    'casa': 'linear-gradient(135deg, #ECFCCB 0%, #D9F99D 100%)',
    'suplementos': 'linear-gradient(135deg, #E0F2FE 0%, #BAE6FD 100%)',
  }
  return {
    bg: gradients[catSlug] || gradients['corpo'],
    label: product.code,
  }
}

// Parse benefits string into array
export function parseBenefits(benefits: string | null | undefined): string[] {
  if (!benefits) return []
  return benefits.split(/[;,]/).map(b => b.trim()).filter(Boolean)
}

// Parse ingredients string into array
export function parseIngredients(ingredients: string | null | undefined): string[] {
  if (!ingredients) return []
  return ingredients.split(/[,;]/).map(i => i.trim()).filter(Boolean)
}

export function shareProduct(product: Product) {
  if (typeof navigator === 'undefined') return
  const url = `${window.location.origin}/?produto=${product.code}`
  const shareData = {
    title: `${product.name} - Abelha Rainha`,
    text: `Confira ${product.name} no catálogo Abelha Rainha!`,
    url,
  }
  if (navigator.share) {
    navigator.share(shareData).catch(() => {})
  } else {
    navigator.clipboard?.writeText(url)
  }
}
