const rolesService = require('../service/roles.service');
const util = require('../utils/util');
module.exports = {
  async list(ctx) {
    const { projectId, name = null, pageNum = 1, pageSize = 10 } = ctx.request.query;

    if (!projectId) {
      return ctx.throw(400, '项目ID不能为空');
    }
    const list = await rolesService.list(projectId, name, pageNum, pageSize);
    const { total } = await rolesService.listCount(projectId, name);

    util.success(ctx, {
      list,
      total,
      pageSize: +pageSize,
      pageNum: +pageNum,
    });
  },

  async listAll(ctx) {
    const { projectId } = ctx.request.query;
    if (!projectId || projectId == '0') {
      return ctx.throw(400, '项目ID不能为空');
    }
    const list = await rolesService.listAll(projectId);
    util.success(ctx, list);
  },

  async create(ctx) {
    const { projectId, name, remark } = ctx.request.body;
    if (!name) {
      return ctx.throw(400, '角色名称不能为空');
    }

    if (projectId == '0' || !projectId) {
      return ctx.throw(400, '请先创建项目');
    }

    if (!util.isNumber(projectId)) {
      return ctx.throw(400, 'projectId不合法');
    }

    const { userId, userName } = util.decodeToken(ctx);

    await rolesService.create(projectId, name, remark, userId, userName);
    util.success(ctx);
  },

  async delete(ctx) {
    const { id, projectId } = ctx.request.body;
    if (!id) {
      return ctx.throw(400, '角色ID不能为空');
    }

    if (!projectId) {
      return ctx.throw(400, '项目ID不能为空');
    }
    await rolesService.delete(id, projectId);
    util.success(ctx);
  },

  async update(ctx) {
    const { id, projectId, name, remark } = ctx.request.body;
    if (!id) {
      return ctx.throw(400, '角色ID不能为空');
    }

    if (!projectId) {
      return ctx.throw(400, '项目ID不能为空');
    }
    await rolesService.update(id, projectId, name, remark);
    util.success(ctx);
  },

  async updateLimits(ctx) {
    const { id, projectId, checked = '', halfChecked = '' } = ctx.request.body;
    if (!id) {
      return ctx.throw(400, '角色ID不能为空');
    }

    if (!projectId) {
      return ctx.throw(400, '项目ID不能为空');
    }
    await rolesService.updateLimits(id, projectId, checked, halfChecked);
    util.success(ctx);
  },
};