import { Injectable } from "@nestjs/common";
import { Initializer } from "../initalizer.interface";
import { InjectRepository } from "@nestjs/typeorm";
import { Menu, Permission, Role } from "@app/models";
import { Repository } from "typeorm";

@Injectable()
export class RoleInit implements Initializer<Promise<void>> {
  constructor(
    @InjectRepository(Role)
    private role: Repository<Role>,
    @InjectRepository(Permission)
    private permission: Repository<Permission>,
    @InjectRepository(Menu)
    private menu: Repository<Menu>
  ){

  }
  async run(): Promise<void> {
    const permission = await this.permission.find({
      where:{
        name: '*'
      }
    })
    const menus = await this.menu.find();
    if (await this.role.findOneBy({name: 'admin'})) {
      return;
    }
    await this.role.save({
      name: 'admin',
      permission: permission,
      menus
    });
  }
}