import { PrismaClient } from "@prisma/client"
import { MODULES, ACTIONS } from "../shared/constants/modules"

const prisma = new PrismaClient()

async function syncPermissions() {
  console.log("Syncing permissions...")

  const roles = await prisma.role.findMany({ select: { id: true, name: true } })

  if (roles.length === 0) {
    console.log("No roles found. Skipping.")
    return
  }

  let created = 0
  let skipped = 0

  for (const role of roles) {
    for (const module of MODULES) {
      const existing = await prisma.permission.findFirst({
        where: { roleId: role.id, module: module.id },
      })

      if (!existing) {
        await prisma.permission.create({
          data: {
            roleId: role.id,
            module: module.id,
            actions: [...ACTIONS],
          },
        })
        console.log(`Created: [${role.name}] → ${module.label}`)
        created++
      } else {
        skipped++
      }
    }
  }

  console.log(`\nDone! Created: ${created}, Already existed: ${skipped}`)
}

syncPermissions()
  .catch((err) => {
    console.error(err)
    process.exit(1)
  })
  .finally(async () => {
    await prisma.$disconnect()
  })