package com.kiisoo.ic.system.controller;


import com.kiisoo.ic.common.BaseController;
import com.kiisoo.ic.system.bean.PrivilageRoleAccountBean;
import com.kiisoo.ic.system.entity.PrivilageRoleDO;
import com.kiisoo.ic.system.service.PrivilageRoleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 角色  前端控制器
 * @author jinchaofan
 * @since 2020-02-19
 */
@Slf4j
@RestController
@RequestMapping("/role")
public class PrivilageRoleController extends BaseController {

    /**
     * 角色 service
     */
    @Autowired
    private PrivilageRoleService privilageRoleService;

    /**
     * 添加角色
     * @param roleName 角色名
     * @return 是否成功
     */
    @ResponseBody
    @PostMapping("/add")
    public Map<String, Object> addRole(@RequestParam("roleName") String roleName) {
        try {
            boolean flag = privilageRoleService.addRole(roleName);
            //成功为0000，失败为0002
            return flag ? data(Boolean.TRUE) : fail(0);
        } catch (Exception e) {
            log.error("添加角色出错", e);
            return fail();
        }
    }

    /**
     /**
     * 删除角色
     * @param roleId 角色id
     * @return 是否成功
     */
    @ResponseBody
    @GetMapping("/remove")
    public Map<String, Object> removeRole(@RequestParam("roleId") Long roleId) {
        try {
            boolean flag = privilageRoleService.removeRole(roleId);
            //成功为0000，存在业务不能删除为0002
            return flag ? data(Boolean.TRUE) : fail(0);
        } catch (Exception e) {
            log.error("添加角色出错", e);
            return fail();
        }
    }

    /**
     * 查询角色信息
     * @return 角色集合
     */
    @ResponseBody
    @GetMapping("/info/list")
    public Map<String, Object> listRoleInfo() {
        try {
            List<PrivilageRoleDO> privilageRoleDOS = privilageRoleService.listRoleInfo();
            return data(privilageRoleDOS);
        } catch (Exception e) {
            log.error("查询角色信息出错", e);
            return fail();
        }
    }

    /**
     * 根据角色的code修改角色的名称
     * @param roleId 角色id
     * @param roleName 需要修改成的名称
     * @return 是否修改成功
     */
    @ResponseBody
    @PostMapping("/modify/role")
    public Map<String,Object> modifyRole(@RequestParam("roleId") Long roleId,@RequestParam("roleName") String roleName){
        try{
            boolean bl = privilageRoleService.modifyRole(roleId,roleName);
            if(bl){
                return success();
            }else {
                return fail();
            }
        }catch (Exception e){
            log.error("修改角色失败",e);
            return fail();
        }
    }

    /**
     * 查询角色和角色的账户个数
     * @return 角色账户集合
     */
    @ResponseBody
    @GetMapping("/role/account/count")
    public Map<String,Object> listOfRoleAndAccountCount(){
        try{
            List<PrivilageRoleAccountBean> accountBeans = privilageRoleService.listOfRoleAndAccountCount();
            return data(accountBeans);
        }catch (Exception e){
            log.error("查询角色和角色的账户个数失败",e);
            return fail();
        }
    }

}
