import { clsx, type ClassValue } from 'clsx'
import { twMerge } from 'tailwind-merge'

export function cn(...inputs: ClassValue[]) {
  return twMerge(clsx(inputs))
}

/**
 * Shared utility functions — Persian/Jalali formatting & helpers
 */

/**
 * Format a number as Persian locale (e.g. 18400 → "۱۸,۴۰۰")
 */
export function formatPersianNumber(n: number): string {
  return n.toLocaleString('fa-IR')
}

/**
 * Format a Toman price (e.g. 850000 → "۸۵۰,۰۰۰ تومان")
 */
export function formatPrice(n: number): string {
  if (n === 0) return 'رایگان'
  return `${n.toLocaleString('fa-IR')} تومان`
}

/**
 * Format a price compactly (e.g. 1200000 → "۱.۲ م.ت")
 */
export function formatPriceCompact(n: number): string {
  if (n === 0) return 'رایگان'
  if (n >= 1_000_000) {
    const m = n / 1_000_000
    return `${m.toLocaleString('fa-IR')} م.ت`
  }
  if (n >= 1_000) {
    const k = n / 1_000
    return `${k.toLocaleString('fa-IR')} ه.ت`
  }
  return `${n.toLocaleString('fa-IR')} تومان`
}

/**
 * Get CSS color for trend direction
 */
export function trendColor(trend: 'up' | 'down' | 'flat'): string {
  if (trend === 'up') return 'var(--green-ink)'
  if (trend === 'down') return 'var(--red)'
  return 'var(--ink-4)'
}

/**
 * Trend arrow character
 */
export function trendArrow(trend: 'up' | 'down' | 'flat'): string {
  if (trend === 'up') return '↑'
  if (trend === 'down') return '↓'
  return '—'
}

/**
 * Truncate string to max length with ellipsis
 */
export function truncate(str: string, max: number): string {
  if (str.length <= max) return str
  return str.slice(0, max).trimEnd() + '...'
}

/**
 * Get category dot color CSS variable
 */
export function categoryColor(category: string): string {
  const map: Record<string, string> = {
    'بازار جهانی':   'var(--ink)',
    'سیاست‌گذاری':  'var(--ink-3)',
    'انرژی و ESG':  'var(--amber)',
    'صادرات':        'var(--ink-2)',
    'تولید داخلی':  'var(--ink)',
    'ریسک و بحران': 'var(--red)',
  }
  return map[category] ?? 'var(--ink-5)'
}

/**
 * Get report type label in Persian
 */
export function reportTypeLabel(type: string): string {
  const map: Record<string, string> = {
    quarterly: 'گزارش فصلی',
    flash:     'Flash Report',
    risk:      'گزارش ریسک',
    free:      'رایگان',
    special:   'گزارش ویژه',
  }
  return map[type] ?? type
}

/**
 * Clamp a value between min and max
 */
export function clamp(val: number, min: number, max: number): number {
  return Math.min(Math.max(val, min), max)
}
