/* ===========================================================
   📦 src/utils/formatters.js
   Tarih, para, sayı, yüzde formatlama yardımcıları
=========================================================== */

/**
 * 📅 formatDateInput(value)
 * SQL veya ISO datetime'i "yyyy-MM-dd" formatına çevirir.
 * <input type="date"> için uygundur.
 * Örnek: "2025-11-07 00:00:00" → "2025-11-07"
 */
export function formatDateInput(value) {
  if (!value) return ''
  try {
    if (typeof value === 'string') {
      // "2025-11-07 00:00:00" → "2025-11-07"
      if (value.includes(' ')) return value.split(' ')[0]
      // "2025-11-07T00:00:00Z" → "2025-11-07"
      if (value.includes('T')) return value.split('T')[0]
      // zaten yyyy-MM-dd ise aynen dön
      if (/^\d{4}-\d{2}-\d{2}$/.test(value)) return value
    }
    if (value instanceof Date) {
      return value.toISOString().split('T')[0]
    }
    return ''
  } catch {
    return ''
  }
}

/**
 * 📅 formatDateDisplay(value)
 * "2025-10-31" veya "2025-10-31 00:00:00" → "31.10.2025"
 * Sadece ekranda gösterim için.
 */
export function formatDateDisplay(value) {
  if (!value) return ''
  try {
    const d = new Date(value)
    if (isNaN(d)) return ''
    const dd = String(d.getDate()).padStart(2, '0')
    const mm = String(d.getMonth() + 1).padStart(2, '0')
    const yyyy = d.getFullYear()
    return `${dd}.${mm}.${yyyy}`
  } catch {
    return ''
  }
}

/**
 * 💰 formatMoney(value, currency)
 * Sayıyı belirtilen para birimiyle biçimlendirir.
 * Varsayılan: TRY
 * Örnek: formatMoney(12500, 'USD')
 */
export function formatMoney(value, currency = 'TRY') {
  const n = Number(value || 0)
  return new Intl.NumberFormat('tr-TR', {
    style: 'currency',
    currency,
    minimumFractionDigits: 2,
    maximumFractionDigits: 2,
  }).format(n)
}

/**
 * 🔢 formatNumber(value, fraction)
 * Genel sayı biçimlendirme (küsuratlı veya küsuratsız)
 */
export function formatNumber(value, fraction = 2) {
  const n = Number(value || 0)
  return n.toLocaleString('tr-TR', {
    minimumFractionDigits: fraction,
    maximumFractionDigits: fraction,
  })
}

/**
 * 💬 formatPercent(value)
 * 0.1 → "%10.00" şeklinde gösterir
 */
export function formatPercent(value) {
  const n = Number(value || 0)
  return `${(n * 100).toFixed(2)}%`
}

export function formatDataSourceLabel(value) {
  const raw = String(value || '').trim()
  const normalized = raw.toLowerCase().replace(/[\s-]+/g, '_')
  if (['pg', 'postgre', 'postgres', 'postgresql'].includes(normalized)) return 'B2B'
  if (['mssql', 'baggi_v3', 'baggi'].includes(normalized)) return 'NEBIM_V3'
  if (normalized === 'uretim') return 'TEDARIK URETIM PROGRAMI'
  if (normalized === 'dummy' || normalized === 'ui') return 'UI'
  return raw || '-'
}
