/**
 * داده‌های پایه برای دیتابیس «واقعی» (production) — به‌جای seed که داده نمونه است.
 * فقط چیزهایی که سایت بدون آن‌ها کار نمی‌کند: دسته‌بندی‌ها، انواع پوست، روش‌های ارسال و سقف ارسال رایگان.
 * بدون محصول، برند، نظر، سفارش یا کاربر نمونه. اجرای دوباره هیچ چیز موجودی را تغییر نمی‌دهد.
 * اجرا (بعد از npm run db:deploy):  npm run db:setup
 */
import "dotenv/config";
import { PrismaPg } from "@prisma/adapter-pg";
import { PrismaClient } from "../src/generated/prisma/client";
import { categories, skinTypes } from "../src/data/taxonomy";
import { shippingSettings } from "../src/data/content";

const db = new PrismaClient({ adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL! }) });

async function main() {
  for (const s of skinTypes) await db.skinType.upsert({ where: { id: s.id }, create: s, update: {} });

  // اول دسته‌های اصلی، بعد زیردسته‌ها (به خاطر والد)
  const ordered = [...categories.filter((c) => !c.parentId), ...categories.filter((c) => c.parentId)];
  for (const [i, c] of ordered.entries()) {
    const exists = await db.category.findFirst({ where: { OR: [{ id: c.id }, { slug: c.slug }] }, select: { id: true } });
    if (!exists) await db.category.create({ data: { ...c, parentId: c.parentId ?? null, sortOrder: i } });
  }

  if ((await db.shippingMethod.count()) === 0) {
    await db.shippingMethod.createMany({ data: shippingSettings.methods.map((m, i) => ({ ...m, tehranOnly: !!m.tehranOnly, sortOrder: i })) });
  }
  await db.setting.upsert({
    where: { key: "freeShippingThreshold" },
    create: { key: "freeShippingThreshold", value: shippingSettings.freeShippingThreshold },
    update: {},
  });

  const [cats, ship] = await Promise.all([db.category.count(), db.shippingMethod.count()]);
  console.log(`✓ داده‌های پایه آماده است: ${cats} دسته، ${skinTypes.length} نوع پوست، ${ship} روش ارسال`);
}

main()
  .catch((e) => {
    console.error(e);
    process.exit(1);
  })
  .finally(() => db.$disconnect());
