package com.hotwj.platform.resourceManagement.companySafetyManager.service;

import com.hotwj.platform.resourceManagement.companySafetyManager.domain.bo.HotCompanySafetyManagerBo;
import com.hotwj.platform.resourceManagement.companySafetyManager.domain.bo.HotCompanySafetyManagerChangeReasonBo;
import com.hotwj.platform.resourceManagement.companySafetyManager.domain.vo.HotCompanySafetyManagerVo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;

import java.util.Collection;
import java.util.List;

/**
 * 安全管理人员Service接口
 *
 * @author shihongwei
 * @date 2025-12-09
 */
 public interface IHotCompanySafetyManagerService {

     /**
      * 构建系统管理员组织树
      *
      * @param bo 查询条件（支持 companyId、deptId）
      * @return 组织树
      */
     cn.hutool.core.lang.tree.Tree<Long> buildSystemAdminTree(HotCompanySafetyManagerBo bo);

     /**
      * 查询安全管理人员
      *
      * @param id 主键
      * @return 安全管理人员
     */
    HotCompanySafetyManagerVo queryById(Long id);

    /**
     * 分页查询安全管理人员列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 安全管理人员分页列表
     */
    TableDataInfo<HotCompanySafetyManagerVo> queryPageList(HotCompanySafetyManagerBo bo, PageQuery pageQuery);

    /**
     * 分页查询该企业下所有人员列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 部门负责人分页列表
     */
    TableDataInfo<HotCompanySafetyManagerVo> queryCompanyUserList(HotCompanySafetyManagerBo bo, PageQuery pageQuery);

    /**
     * 查询符合条件的安全管理人员列表
     *
     * @param bo 查询条件
     * @return 安全管理人员列表
     */
    List<HotCompanySafetyManagerVo> queryList(HotCompanySafetyManagerBo bo);

    /**
     * 获取上级管理人员候选人列表
     *
     * @param companyId 公司ID
     * @param deptId    部门ID（可选，如果有部门限制则传）
     * @param currentId 当前人员ID（可选，编辑时传）
     * @return 候选人列表
     */
    List<HotCompanySafetyManagerVo> getSuperiorCandidates(Long companyId, Long deptId, Long currentId);

    /**
     * 新增安全管理人员
     *
     * @param bo 安全管理人员
     * @return 是否新增成功
     */
    Boolean insertByBo(HotCompanySafetyManagerBo bo);

    /**
     * 修改安全管理人员
     *
     * @param bo 安全管理人员
     * @return 是否修改成功
     */
    Boolean updateByBo(HotCompanySafetyManagerChangeReasonBo bo);

    Boolean resetPassword(Long id);

    /**
     * 校验并批量删除安全管理人员信息
     *
     * @param ids     待删除的主键集合
     * @param isValid 是否进行有效性校验
     * @return 是否删除成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    boolean updateUserFaceInitialOssId(String businessUserId, Long ossId);

   /**
    * 查询所有安全管理人员列表
    *
    * @param companyId 企业ID
    * @return 安全管理人员列表
    */
   List<HotCompanySafetyManagerVo> queryAllList(Long companyId);

   /**
    * 查询特定的安全管理人员列表（未离职、已启用、已通过审核）
    *
    * @param companyId 企业ID
    * @return 安全管理人员列表
    */
   List<HotCompanySafetyManagerVo> queryValidList(Long companyId);
}
