import { Injectable } from "@nestjs/common"
import { RoleService } from "../../../modules/role/v1/role.service"
import { roleConst } from "../../../constants/role.constant"

@Injectable()
export class RoleSeedService {
  constructor(private readonly roleService: RoleService) {}

  async run() {
    try {
      const createdRoles: { [key: string]: number } = {}

      for (const roleData of roleConst) {
        const isRoleExist = await this.roleService.checkRoleExist(roleData.name)

        if (!isRoleExist) {
          let parentRoleId = null
          if (roleData.parentRole && createdRoles[roleData.parentRole]) {
            parentRoleId = createdRoles[roleData.parentRole]
          }

          const data = {
            name: roleData.name,
            status: 1,
            description: null,
            parent_role_id: parentRoleId,
            is_web_login: true,
          }

          const createdRole = await this.roleService.createRole(data)

          if (createdRole && "id" in createdRole) {
            createdRoles[roleData.name] = createdRole.id
          } else {
            console.error(`Failed to create role: ${roleData.name}`)
          }
        } else {
          console.log(`Role ${roleData.name} already exists, seeding skipped.`)
        }
      }

      console.log("Role seeding completed successfully!")
    } catch (error) {
      console.error("Error running Role seeder:", error)
    }
  }
}
