// src/utils/flatten.js

/**
 * 🔹 sql.Null* türlerini sadeleştirir.
 * Backend'den gelen objelerde genellikle { String, Int32, Float64, Time, Bool, Valid } alanları vardır.
 * Bu yardımcı, bunları otomatik olarak primitive değerlere dönüştürür.
 * Örnek:
 *   { String: "ABC", Valid: true } → "ABC"
 *   { Float64: 10.5, Valid: true } → 10.5
 *   { Bool: false, Valid: true } → false
 *   { Valid: false } → null
 */
export function flat(value) {
  if (value === null || value === undefined) return null

  // Eğer sql.Null* objesi geldiyse
  if (typeof value === 'object' && 'Valid' in value) {
    if (!value.Valid) return null

    // Farklı tiplerde gelen alanları sırayla dene
    if ('String' in value) return value.String
    if ('Float64' in value) return value.Float64
    if ('Int32' in value) return value.Int32
    if ('Int16' in value) return value.Int16
    if ('Bool' in value) return value.Bool
    if ('Time' in value) {
      try {
        // Tarih objesi veya ISO string olabilir
        const t = value.Time
        return typeof t === 'string' ? t : new Date(t).toISOString()
      } catch {
        return null
      }
    }
    return null
  }

  // Düz değer (primitive)
  return value
}

/**
 * 🔹 Objeyi tamamen düzleştirir (tüm alanlarda flat uygular)
 * Örnek:
 *   flattenObject({ A: { String: "x", Valid: true }, B: 5 })
 *   → { A: "x", B: 5 }
 */
export function flattenObject(obj = {}) {
  const result = {}
  for (const [key, val] of Object.entries(obj)) {
    result[key] = flat(val)
  }
  return result
}
