package cn.iocoder.yudao.module.crm.service.crmclues;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.crm.controller.admin.crmclues.vo.*;
import cn.iocoder.yudao.module.crm.controller.admin.crmcustomer.vo.CrmCustomerSaveReqVO;
import cn.iocoder.yudao.module.crm.controller.admin.crmcustomer.vo.CustomerImportRespVO;
import cn.iocoder.yudao.module.crm.dal.dataobject.crmclues.CrmCluesDO;

import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 线索 Service 接口
 *
 * @author yshop
 */
public interface CrmCluesService {

    /**
     * 创建线索
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createClues(@Valid CrmCluesSaveReqVO createReqVO);

    /**
     * 更新线索
     *
     * @param updateReqVO 更新信息
     */
    void updateClues(@Valid CrmCluesSaveReqVO updateReqVO);

    /**
     * 删除线索
     *
     * @param id 编号
     */
    void deleteClues(Long id);

    /**
     * 获得线索
     *
     * @param id 编号
     * @return 线索
     */
    CrmCluesDO getClues(Long id);

    /**
     * 获得线索分页
     *
     * @param pageReqVO 分页查询
     * @return 线索分页
     */
    PageResult<CrmCluesRespVO> getCluesPage(CrmCluesPageReqVO pageReqVO);

    /**
     * 放入线索池
     *
     * @param id
     */
    void openClues(Long id);

    /**
     * 领取线索
     *
     * @param id
     */
    void receiveClues(Long id);

    /**
     * 线索转换成客户
     *
     * @param createReqVO
     */
    void createCustomer(CrmCustomerSaveReqVO createReqVO);

    /**
     * 线索导入
     *
     * @param importUsers 导入文件
     * @param deptId      部门ID
     * @param adminIds    用户ID
     * @param averageType 导入类型
     * @return
     */
    CustomerImportRespVO importList(List<CrmCluesImportVO> importUsers, String deptId, String adminIds, Integer averageType);

    /**
     * 转移线索
     *
     * @param transferVO
     */
    void transfer(CrmCluesTransferVO transferVO);

    /**
     * 获取指定用户的线索统计信息
     *
     * @param ownerUserIds 用户ID
     * @return 线索统计信息列表
     */
    List<CrmCluesStatisticsRespVO> getCluesStatisticsByUserIds(List<Long> ownerUserIds, LocalDateTime[] createTime);

    /**
     * 线索跟进任务
     */
    void autoConfirmJob();
}
