package com.chinaweal.aiccs.org.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.chinaweal.aiccs.common.base.entity.dto.login.LoginMessage;
import com.chinaweal.aiccs.common.constant.CommonConstants;
import com.chinaweal.aiccs.common.util.StringUtils;
import com.chinaweal.aiccs.org.entity.OrgUnits;
import com.chinaweal.aiccs.org.entity.dto.OrgTreeNode;
import com.chinaweal.aiccs.org.entity.vo.CascaderVO;
import com.chinaweal.aicorg.model.AICOrg;
import com.chinaweal.aicorg.model.AICUser;

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

/**
 * 组织架构相关接口
 *
 * @author <a href="https://blog.lroyia.top">lroyia</a>
 * @since 2020/8/18 10:17
 **/
public interface AicorgService extends IService<OrgUnits> {

    /**
     * 获取包含指定权限的用户所构成的组织架构树
     *
     * @param permissions 权限
     * @return 树结构
     * @author lroyia
     * @since 2020年8月18日 10:19:34
     */
    List<OrgTreeNode> getOrgTreeWithPermission(List<String> permissions, LoginMessage loginMessage);


    /**
     * 根据当前用户获取所属辖区
     *
     * @param curUser 当前用户
     * @return 获取结果
     * @author lroyia
     * @since 2021年6月21日 17:07:36
     */
    String getRegionByUser(AICUser curUser);

    /**
     * 根据当前用户获取所属辖区码值
     *
     * @param curUser 当前用户
     * @return 获取结果
     * @author Lee
     * @since 2021年6月29日 17点37分
     */
    String getRegionCodeByUser(AICUser curUser);

    OrgUnits queryByOrgNumber(String orgNumber);

    List<AICUser> queryByOrgNumberAndSysMenu(String sysMenuFiled, String orgNumber);

    List<String> jurisdictionCheck(String sysMenuFiled, String userid);

    /**
     * 根据用户名查询用户信息
     *
     * @param username 用户名
     * @return 查询结果
     * @author lroyia
     * @since 2025年2月25日19:25:22
     */
    AICUser queryUserByUserName(String username);

    /**
     * 根据用户等级获取机关编号前数位
     *
     * @param user
     * @return
     */
    String getOrgnumberByUserLevel(AICUser user,boolean sjCheck);

    OrgUnits getTOrgunitsById(String orgUnitID);

    OrgUnits queryByOrgNumberMap(Map<String, String> params);

    String getRegionCodeByOrgLevel(AICUser curUser);

    List<CascaderVO> queryAll(String orgNumber);

    /**
     * 通过机构编码和权限编码获取用户信息
     *
     * @param perm  权限信息
     * @param orgId 机构id
     * @return 用户清单
     * @author lroyia
     * @since 2023年4月26日 09:54:37
     */
    List<AICUser> getUsersByOrgAndPermission(String perm, String orgId);

    /**
     * 通过机构id，查询父机构
     *
     * @param deptId 部门id
     * @return 查询结果
     * @author lroyia
     * @since 2023年4月26日 09:34:18
     */
    OrgUnits findParentOrgByPK(String deptId);

    /**
     * 转为AICOrg
     *
     * @param orgUnits 转换信息
     * @return 转换结果
     * @author lroyia
     * @since 2023年4月26日 10:51:08
     */
    default AICOrg toAICOrg(OrgUnits orgUnits) {
        if (orgUnits == null) {
            return null;
        }
        AICOrg aic = new AICOrg();
        aic.setDelete(StringUtils.equals(orgUnits.getDeleted(), CommonConstants.TRUE_1));
        aic.setName(orgUnits.getOrgUnitName());
        aic.setRegion(orgUnits.getOrgNumber());
        aic.setPrimaryKey(orgUnits.getOrgUnitId());
        return aic;
    }
}
