package com.ruoyi.group.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.group.domain.dto.CustGroupQueryDTO;
import com.ruoyi.group.domain.entity.CustGroup;
import com.ruoyi.group.domain.vo.CustGroupVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 客群Mapper接口
 *
 * @author ruoyi
 */
@Mapper
public interface CustGroupMapper extends BaseMapper<CustGroup> {

    /**
     * 查询客群数量（根据部门ID和共享设置）
     *
     * @param deptId 部门ID
     * @param userName 用户名
     * @return 数量
     */
//    Long countByDeptOrUser(@Param("deptId") Long deptId, @Param("userName") Long userName);

    /**
     * 查询客群列表
     *
     * @param dto 查询条件
     * @return 客群VO列表
     */
    List<CustGroupVO> selectCustGroupList(@Param("dto") CustGroupQueryDTO dto,
                                          @Param("userName") String userName,
                                          @Param("deptId") String deptId,
                                          @Param("headId") String headId);

    /**
     * 根据ID查询客群详情
     *
     * @param id 客群ID
     * @return 客群VO
     */
    CustGroupVO selectCustGroupById(@Param("id") Long id,
                                    @Param("userName") String userName,
                                    @Param("deptId") String deptId,
                                    @Param("headRole") Boolean headRole,
                                    @Param("headId") String headId);

    /**
     * 校验当前用户是否有客群查看权限
     *
     * @param id 客群ID
     * @param userName 当前用户名
     * @param deptId 当前部门ID
     * @return 可查看数量
     */
    Long countVisibleCustGroup(@Param("id") Long id,
                               @Param("userName") String userName,
                               @Param("deptId") String deptId,
                               @Param("headRole") Boolean headRole,
                               @Param("headId") String headId);

    /**
     * 校验客群是否属于总行管理员共享操作范围
     *
     * @param id 客群ID
     * @return 数量
     */
    Long countHeadOperableCustGroup(@Param("id") Long id,
                                    @Param("headId") String headId);

    /**
     * 查询所有已有的客群标签
     *
     * @return 标签列表
     */
    List<String> selectAllGroupTags();
}
