/**
 * Seed CLI — carga el catálogo de medios de pago (platformId) de Dpago en la
 * tabla genérica `provider_payment_method`.
 *
 * Uso:
 *   pnpm seed:dpago-platforms
 *
 * Idempotente: usa upsert sobre (provider, externalId), así que se puede correr
 * las veces que haga falta. Actualiza `name`/`method` si cambian.
 */
import "reflect-metadata";
import { PaymentMethod, PrismaClient, Provider } from "@prisma/client";

const prisma = new PrismaClient();

// Catálogo de platformId de Dpago (Paraguay). `method` mapea al enum interno
// para UI/reporting; `externalId` es el número que Dpago espera en el request.
const DPAGO_PLATFORMS: { externalId: string; name: string; method: PaymentMethod }[] = [
  { externalId: "5", name: "Bancard crédito", method: PaymentMethod.card },
  { externalId: "16", name: "Bancard débito", method: PaymentMethod.card },
  { externalId: "13", name: "Upay crédito", method: PaymentMethod.wallet },
  { externalId: "17", name: "Upay débito", method: PaymentMethod.wallet },
  { externalId: "2", name: "Personal", method: PaymentMethod.wallet },
  { externalId: "1", name: "Tigo", method: PaymentMethod.wallet },
  { externalId: "3", name: "Wally", method: PaymentMethod.wallet },
  { externalId: "4", name: "Zimple", method: PaymentMethod.zimple },
  { externalId: "14", name: "Pix", method: PaymentMethod.pix },
  { externalId: "50", name: "Plugpay Pix", method: PaymentMethod.pix },
  { externalId: "6", name: "QR", method: PaymentMethod.other },
  { externalId: "15", name: "QR argentino", method: PaymentMethod.other },
  { externalId: "18", name: "QR Ueno", method: PaymentMethod.other },
];

async function main() {
  let created = 0;
  let updated = 0;
  for (const p of DPAGO_PLATFORMS) {
    const id = `ppm_${Provider.dpago}_${p.externalId}`;
    const existing = await prisma.providerPaymentMethod.findUnique({
      where: { provider_externalId: { provider: Provider.dpago, externalId: p.externalId } },
    });
    await prisma.providerPaymentMethod.upsert({
      where: { provider_externalId: { provider: Provider.dpago, externalId: p.externalId } },
      create: {
        id,
        provider: Provider.dpago,
        externalId: p.externalId,
        name: p.name,
        method: p.method,
        country: "PY",
        active: true,
      },
      update: { name: p.name, method: p.method },
    });
    if (existing) updated++;
    else created++;
  }
  console.log(`✓ Dpago platforms sembrados: ${created} nuevos, ${updated} actualizados.`);
}

main()
  .catch((err) => {
    console.error("Error en seed-dpago-platforms:", err);
    process.exit(1);
  })
  .finally(() => prisma.$disconnect());
