package com.njcn.rdms.module.system.api.dept;

import cn.hutool.core.collection.CollUtil;
import com.njcn.rdms.framework.common.pojo.CommonResult;
import com.njcn.rdms.module.system.service.dept.DeptService;
import com.njcn.rdms.module.system.service.dept.OrgLeaderRelationService;
import com.njcn.rdms.module.system.service.user.AdminUserService;
import io.swagger.v3.oas.annotations.Hidden;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;

import java.util.Collections;
import java.util.Set;

import static com.njcn.rdms.framework.common.pojo.CommonResult.success;

/**
 * 组织负责人 RPC 接口实现
 */
@RestController
@Validated
@Hidden
public class OrgLeaderApiImpl implements OrgLeaderApi {

    @Resource
    private OrgLeaderRelationService orgLeaderRelationService;
    @Resource
    private DeptService deptService;
    @Resource
    private AdminUserService adminUserService;

    @Override
    public CommonResult<Set<Long>> getReachableUserIds(Long currentUserId) {
        // 1. 当前用户作为 leader 生效中的 dept_id 集合
        Set<Long> leaderDeptIds = orgLeaderRelationService.listEffectiveDeptIdsByUserId(currentUserId);
        if (CollUtil.isEmpty(leaderDeptIds)) {
            return success(Collections.emptySet());
        }

        // 2. 含递归子孙节点的 dept_id 集合（按 path 前缀匹配，一次 SQL 完成）
        Set<Long> allDeptIds = deptService.listDescendantDeptIds(leaderDeptIds);

        // 3. 这些 dept 下启用且未离职的 user_id 集合
        Set<Long> userIds = adminUserService.listEnabledUserIdsByDeptIds(allDeptIds);

        // 4. 移除自己（自己看自己走通道 1，不在本结果集里）
        userIds.remove(currentUserId);
        return success(userIds);
    }

}
