/**
 * Seed dedicado: TARIFAS DE IA (ai_tarifas)
 * ─────────────────────────────────────────────────────────────────────────────
 * Precio por proveedor+modelo (USD por 1M tokens, in/out). Tabla de nivel
 * sistema que alimenta el cálculo de costo del consumo de IA.
 *
 * Se ejecuta UNA sola vez al preparar el ambiente (dev/prod). Es idempotente
 * (upsert sobre el único `(proveedor, modelo)`), así que re-correrlo solo
 * actualiza precios, no duplica.
 *
 * Uso:
 *   npx ts-node prisma/seeds/ai-tarifas.seed.ts
 *
 * Precios de referencia — luego se ajustan por la UI de Tarifas (holding)
 * cuando el proveedor cambie sus precios de lista.
 */
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

type Tarifa = { proveedor: string; modelo: string; in: number; out: number };

const TARIFAS: Tarifa[] = [
  // ── Anthropic ──────────────────────────────────────────────────────────────
  { proveedor: 'anthropic', modelo: 'claude-3-haiku-20240307', in: 0.25, out: 1.25 },
  { proveedor: 'anthropic', modelo: 'claude-3-5-haiku-20241022', in: 0.8, out: 4.0 },
  { proveedor: 'anthropic', modelo: 'claude-3-sonnet-20240229', in: 3.0, out: 15.0 },
  { proveedor: 'anthropic', modelo: 'claude-3-5-sonnet-20241022', in: 3.0, out: 15.0 },
  { proveedor: 'anthropic', modelo: 'claude-3-opus-20240229', in: 15.0, out: 75.0 },
  { proveedor: 'anthropic', modelo: 'claude-haiku-4-5-20251001', in: 1.0, out: 5.0 },
  { proveedor: 'anthropic', modelo: 'claude-sonnet-4-6', in: 3.0, out: 15.0 },
  { proveedor: 'anthropic', modelo: 'claude-sonnet-5', in: 3.0, out: 15.0 },
  // ── OpenAI ─────────────────────────────────────────────────────────────────
  { proveedor: 'openai', modelo: 'gpt-4o', in: 2.5, out: 10.0 },
  { proveedor: 'openai', modelo: 'gpt-4o-mini', in: 0.15, out: 0.6 },
  { proveedor: 'openai', modelo: 'gpt-4-turbo', in: 10.0, out: 30.0 },
  { proveedor: 'openai', modelo: 'gpt-4.1', in: 2.0, out: 8.0 },
  { proveedor: 'openai', modelo: 'gpt-4.1-mini', in: 0.4, out: 1.6 },
  { proveedor: 'openai', modelo: 'gpt-4.1-nano', in: 0.1, out: 0.4 },
  { proveedor: 'openai', modelo: 'o3', in: 2.0, out: 8.0 },
  { proveedor: 'openai', modelo: 'o3-mini', in: 1.1, out: 4.4 },
  { proveedor: 'openai', modelo: 'o4-mini', in: 1.1, out: 4.4 },
  // ── DeepSeek (precios de pico; verificados en api-docs.deepseek.com) ─────────
  { proveedor: 'deepseek', modelo: 'deepseek-chat', in: 0.27, out: 1.1 },
  { proveedor: 'deepseek', modelo: 'deepseek-reasoner', in: 0.55, out: 2.19 },
  { proveedor: 'deepseek', modelo: 'deepseek-v4-flash', in: 0.44, out: 1.32 },
  // Alias con el que la API responde cuando se pide deepseek-v4-flash (campo `model`
  // de la respuesta). Se tarifa igual: sin esta fila el consumo quedaba sin costo.
  { proveedor: 'deepseek', modelo: 'deepseek-flash', in: 0.44, out: 1.32 },
  { proveedor: 'deepseek', modelo: 'deepseek-v4-pro', in: 1.32, out: 3.96 },
];

async function main() {
  console.log(`🤖 Seed de tarifas de IA — ${TARIFAS.length} modelos (USD por 1M tokens)...`);
  for (const t of TARIFAS) {
    await prisma.ai_tarifas.upsert({
      where: { proveedor_modelo: { proveedor: t.proveedor, modelo: t.modelo } },
      update: { precio_in_por_1m: t.in, precio_out_por_1m: t.out, activo: true, updated_at: new Date() },
      create: { proveedor: t.proveedor, modelo: t.modelo, precio_in_por_1m: t.in, precio_out_por_1m: t.out, activo: true },
    });
    console.log(`  ✅ ${t.proveedor} / ${t.modelo}  →  in $${t.in} · out $${t.out}`);
  }
  const total = await prisma.ai_tarifas.count();
  console.log(`🎉 Tarifas sincronizadas. Total en ai_tarifas: ${total}`);
}

main()
  .catch((e) => {
    console.error('❌ Error en el seed de tarifas de IA:', e);
    process.exit(1);
  })
  .finally(async () => {
    await prisma.$disconnect();
  });
