import { PrismaClient } from "@prisma/client";
import * as bcrypt from "bcryptjs";

const prisma = new PrismaClient();

async function main() {
  console.log("🧹 Limpando dados do banco de dados para ambiente de produção...");

  // Limpar tabelas mantendo ordem de chave estrangeira
  await prisma.serviceOrder.deleteMany({});
  await prisma.cashMovement.deleteMany({});
  await prisma.accountPayable.deleteMany({});
  await prisma.accountReceivable.deleteMany({});
  await prisma.rentalItem.deleteMany({});
  await prisma.rental.deleteMany({});
  await prisma.equipment.deleteMany({});
  await prisma.category.deleteMany({});
  await prisma.customer.deleteMany({});
  await prisma.supplier.deleteMany({});
  await prisma.systemNotification.deleteMany({});
  await prisma.user.deleteMany({});
  await prisma.company.deleteMany({});

  console.log("🚀 Criando empresa e usuários padrões do sistema...");

  // 1. Criar Empresa Padrão (Tenant Inicial)
  const company = await prisma.company.create({
    data: {
      legalName: "BlackLoc Locacoes Industriais LTDA",
      tradeName: "BlackLoc ERP",
      document: "12345678000190",
      email: "admin@blackloc.com",
      phone: "(81) 3333-1000",
      status: "ACTIVE",
      plan: "Pro Enterprise",
      monthlyFee: 499.0,
      dueDay: 10,
      lastPaymentStatus: "PAID",
    },
  });

  const passwordHash = await bcrypt.hash("admin123", 10);

  // 2. Usuário Administrador Principal da Empresa (Owner / Admin)
  await prisma.user.create({
    data: {
      companyId: company.id,
      name: "Administrador BlackLoc",
      email: "admin@blackloc.com",
      passwordHash,
      role: "OWNER",
      active: true,
    },
  });

  // Alias para compatibilidade local
  await prisma.user.create({
    data: {
      companyId: company.id,
      name: "Administrador Geral",
      email: "admin@rentx.local",
      passwordHash,
      role: "OWNER",
      active: true,
    },
  });

  // 3. Usuário SuperAdmin Master do SaaS
  await prisma.user.create({
    data: {
      companyId: company.id,
      name: "SuperAdmin Master",
      email: "superadmin@blackloc.com",
      passwordHash,
      role: "SUPERADMIN",
      active: true,
    },
  });

  // Alias para compatibilidade local
  await prisma.user.create({
    data: {
      companyId: company.id,
      name: "SuperAdmin RentX",
      email: "superadmin@rentx.local",
      passwordHash,
      role: "SUPERADMIN",
      active: true,
    },
  });

  console.log("✨ Banco de dados limpo e configurado com sucesso para Produção!");
  console.log("---------------------------------------------------------------");
  console.log("🔑 PAINEL DO CLIENTE (ERP):");
  console.log("   E-mail: admin@blackloc.com | Senha: admin123");
  console.log("🔑 PAINEL MASTER (SUPERADMIN):");
  console.log("   E-mail: superadmin@blackloc.com | Senha: admin123");
  console.log("---------------------------------------------------------------");
}

main()
  .then(async () => prisma.$disconnect())
  .catch(async (error) => {
    console.error(error);
    await prisma.$disconnect();
    process.exit(1);
  });
