package com.css.simulation.resource.server.app.service;

import api.common.pojo.param.system.RoleParam;
import api.common.pojo.po.system.RoleMenuPO;
import api.common.pojo.po.system.RolePO;
import api.common.pojo.vo.system.RoleVO;
import api.common.util.ObjectUtil;
import api.common.util.StringUtil;
import com.css.simulation.resource.server.infra.util.PageUtil;
import com.css.simulation.resource.server.infra.util.PoUtil;
import com.css.simulation.resource.server.infra.db.mysql.mapper.RoleMapper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class RoleService {

    @Autowired
    RoleMapper roleMapper;

    public PageInfo<RoleVO> getRolePageList(RoleParam pageParam) {
        PageUtil.setPageInfo(pageParam);
        List<RoleVO> list = roleMapper.getRolePageList(pageParam);
        return new PageInfo<>(list);
    }

    public RolePO saveRole(RoleVO roleVO) {
        RolePO po = new RolePO();
        ObjectUtil.voToPo(roleVO,po);
        //常规字段赋值
        PoUtil.initAddPo(po);
        String id = po.getId();
        if(ObjectUtil.isNull(id)){//新增
            po.setId(StringUtil.getRandomUUID());
            roleMapper.insert(po);
        }else{
            roleMapper.update(po);
        }
        return po;
    }

    public int delRoleById(RolePO rolePO) {
        PoUtil.initDelPo(rolePO);
        return roleMapper.delRoleById(rolePO);
    }

    public RoleVO saveMenusToRole(RoleVO roleVO) {
        String roleId = roleVO.getId();
        if(ObjectUtil.isNull(roleId)){
            return null;
        }
        List<String> menuIds = roleVO.getMenuIds();
        RoleMenuPO RoleMenu = new RoleMenuPO();
        RoleMenu.setRoleId(roleId);
        PoUtil.initDelPo(RoleMenu);
        //删除旧数据
        roleMapper.delRoleMenus(RoleMenu);
        List<RoleMenuPO> list = new ArrayList<>();
        if(ObjectUtil.isNotNull(menuIds)){//新增新数据
            for (String menuId: menuIds) {
                RoleMenuPO po = new RoleMenuPO();
                PoUtil.initAddPo(po);
                po.setId(StringUtil.getRandomUUID());
                po.setRoleId(roleId);
                po.setMenuId(menuId);
                list.add(po);
            }
            roleMapper.insertRoleMenus(list);
        }
        return roleVO;
    }
}
