const system = require("../../../system");
const ServiceBase = require("../../sve.base")
class RoleService extends ServiceBase {
  constructor() {
    super("role", ServiceBase.getDaoName(RoleService));

    this.roleauthDao = system.getObject("db.role.roleauthDao");
  }

  /**
   * role  添加 
   * @param {*} params 
   */
  async apiAddRole(params) {
    try {
      return await this.addRole(params);
    } catch (error) {
      return system.getResult(null, `系统错误 错误信息 ${error}`);
    }
  }

  async apiQueryById(params){
    try {
      return await this.queryById(params);
    } catch (error) {
      return system.getResult(null, `系统错误 错误信息 ${error}`);      
    }
  }

  /**
   * role  更新 
   * @param {*} params 
   */
  async apiUpdRole(params) {
    try {
      return await this.updateRole(params);
    } catch (error) {
      return system.getResult(null, `系统错误 错误信息 ${error}`);
    }
  }

  /**
   * role  删除 
   * @param {*} params 
   */
  async apiDelRole(params) {
    try {
      return await this.delRole(params);
    } catch (error) {
      return system.getResult(null, `系统错误 错误信息 ${error}`);
    }
  }

  /**
   * role 查询列表 
   * @param {*} params 
   */
  async apiListRole(params) {
    try {
      return await this.listRole(params);
    } catch (error) {
      return system.getResult(null, `系统错误 错误信息 ${error}`);
    }
  }

  async setAuth(params) {
    var saas_id = Number(params.saas_id || 0);
    var role = await this.findById(params.id);
    var authIds = params.authIds;
    if(!role) {
      return system.getResult(null, "角色不存在");
    }

    if(role.saas_id !== saas_id) {
      return system.getResult(null, "权限不足");
    }

    var self = this;
    // 先删
    await this.roleauthDao.delByRoleId(role.id);
    var list = [];
    for(var auth_id of authIds) {
      list.push({auth_id: auth_id, role_id: role.id});
    }
    // 后存
    if(list.length > 0) {
      await this.roleauthDao.bulkCreate(list)
    }
    return system.getResultSuccess();
  }




  /***************************************************************** */


  /**
   * 添加
   * @param {T} params 
   */
  async addRole(params) {
    params.code = this.trim(params.code);
    params.name = this.trim(params.name);
    params.saas_id = Number(params.saas_id || 0);
    try {
      let res = await this.create(params);
      console.log(`saas 信息插入 ： ${JSON.stringify(res)}`);
      return system.getResult(res);
    } catch (error) {
      return system.getResult(-1, `系统错误 错误信息 ${error}`);
    }
  }

  /**
   * 更新
   * @param {T} params 
   */
  async updateRole(params) {
    if (params.id) {
      params.id = Number(this.trim(params.id));
    }
    let _role = await this.findById(this.trim(params.id));
    if (!_role) {
      return system.getResult(-1, `参数错误 角色不存在`);
    }
    if (params.code) {
      _role.code = this.trim(params.code);
    }
    if (params.name) {
      _role.name = this.trim(params.name);
    }
    if (params.saas_id) {
      _role.saas_id = Number(params.saas_id);
    }
    try {
      let res = await _role.save();
      console.log(`saas 信息插入 ： ${JSON.stringify(res)}`);
      return system.getResult(res);
    } catch (error) {
      return system.getResult(-1, `系统错误 错误信息 ${error}`);
    }
  }

  /**
   * 删除角色
   * @param {*} params 
   */
  async delRole(params) {
    try {
      //检查是否存在此记录
      if (!params.id) {
        return system.getResult(-1, `参数错误 ID不能为空`);
      }
      params.id = this.trim(params.id);
      let _role = await this.findById(params.id);
      if (!_role) {
        return system.getResult(-1, `角色不存在`);
      }
      //检查该角色是否有用户使用
      let users = await this.dao.findUserByRoleId(params);
      if (!users || users.length != 0) {
        return system.getResult(-1, `角色不能删除`);
      }
      //删除并删除对应表
      let res = await _role.destroy();
      return system.getResult(res);
    } catch (error) {
      return system.getResult(-1, `系统错误 错误信息${error}`);
    }
  }

  /**
   * 根据ID查询明细
   * @param {*} params 
   */
  async queryById(params){
    try {
      if(!params.id){
        return system.getResult(-1,`参数错误 ID不能为空`);
      }
      let _role = await this.dao.getById(this.trim(params.id));
      if(!_role){
        return system.getResult(-1,`角色不存在`);
      }

      // 查询角色关联权限ids
      _role.authIds = await this.roleauthDao.authIdsByRoleIds([_role.id]);
      this.handleDate(_role,['created_at'],null,-8);
      this.handleDate(_role,['updated_at'],null,-8);
      return system.getResult(_role);
    } catch (error) {
      return system.getResult(-1, `系统错误 错误信息${error}`);      
    }
  }

  /**
   * 查询列表
   * @param {*} params 
   */
  async listRole(params) {
    let where = {};
    let pageIndex = Number(params.pageIndex || 1);
    let pageSize = Number(params.pageSize || 10);
    if (params.code) {
      where.code = this.trim(params.code);
    }
    if (params.name) {
      where.name = this.trim(params.name);
    }
    if (params.hasOwnProperty("saas_id")) {
      where.saas_id = Number(params.saas_id);
    }
    try {
      let roleList = await this.getPageList(pageIndex, pageSize, where);
      for (let item  of roleList.rows) {
        this.handleDate(item,['created_at'],null,-8);
        this.handleDate(item,['updated_at'],null,-8);
      }
      return system.getResult(roleList);
    } catch (error) {
      return system.getResult(-1, `系统错误 错误信息 ${error}`);
    }
  }

}
module.exports = RoleService;
