package com.ruoyi.group.service;

import com.ruoyi.group.domain.dto.CustGroupQueryDTO;
import com.ruoyi.group.domain.dto.GridImportDTO;
import com.ruoyi.group.domain.entity.CustGroup;
import com.ruoyi.group.domain.vo.CustGroupVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 客群Service接口
 *
 * @author ruoyi
 */
public interface ICustGroupService {

    /**
     * 查询客群列表
     *
     * @param dto 查询条件
     * @return 客群VO列表
     */
    List<CustGroupVO> listCustGroup(CustGroupQueryDTO dto);

    /**
     * 根据ID查询客群详情
     *
     * @param id 客群ID
     * @return 客群VO
     */
    CustGroupVO getCustGroup(Long id);

    /**
     * 异步创建客群（模板导入）
     *
     * @param custGroup 客群实体
     * @param file Excel文件
     * @return 客群ID
     */
    String createCustGroupByTemplate(CustGroup custGroup, MultipartFile file);

    /**
     * 异步创建客群（网格导入）
     *
     * @param gridImportDTO 网格导入条件
     * @return 客群ID
     */
    String createCustGroupByGrid(GridImportDTO gridImportDTO);

    /**
     * 更新客群（网格导入）
     *
     * @param gridImportDTO 网格导入条件
     * @return 结果消息
     */
    String updateCustGroupByGrid(GridImportDTO gridImportDTO);

    /**
     * 更新客群（模板导入）
     *
     * @param custGroup 客群实体
     * @param file Excel文件
     * @return 结果消息
     */
    String updateCustGroupByTemplate(CustGroup custGroup, MultipartFile file);

    /**
     * 删除客群
     *
     * @param idList 客群ID列表
     * @return 结果消息
     */
    String deleteCustGroup(List<Long> idList);

    /**
     * 检查客群名称是否存在
     *
     * @param groupName 客群名称
     * @return true=存在, false=不存在
     */
    boolean checkGroupNameExist(String groupName);

    /**
     * 查询客群创建状态
     *
     * @param id 客群ID
     * @return 创建状态：0=创建中, 1=创建成功, 2=创建失败
     */
    String getCreateStatus(Long id);

    /**
     * 更新动态客群（定时任务调用）
     * 根据原始导入条件重新查询并更新客户列表
     */
    void updateDynamicCustGroups();

    /**
     * 检查并禁用过期客群（定时任务调用）
     */
    void checkAndDisableExpiredGroups();

}