package com.cpop.oam.business.service;

import com.cpop.oam.business.bo.ClueFollowUpBo;
import com.cpop.oam.business.bo.CluePutOffBo;
import com.cpop.oam.business.bo.ClueUpdateBo;
import com.cpop.oam.business.vo.*;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.cpop.oam.business.entity.Clue;

import java.util.List;

/**
 * 线索表 服务层。
 *
 * @author DB
 * @since 2024-02-19
 */
public interface ClueService extends IService<Clue> {

    /**
     * 个人线索分页
     * @author DB
     * @since 2024/2/19
     * @return R<Page<SignGoalPageVo>>
     */
    Page<CluePageVo> getPersonCluePage(Integer clueStatus, String city, String brandId, String storeId, String chargeOrPhone, String staffId, String signMonth,Integer followStatus);

    /**
     * 个人签约目标
     * @author DB
     * @since 2024/2/20
     * @param signMonth 签约月份
     * @return PersonSignGoalVo
     */
    PersonSignGoalVo getPersonSignGoal(String signMonth,String staffId);

    /**
     * 线索跟进
     * @author DB
     * @since 2024/2/20
     */
    void clueFollowUp(ClueFollowUpBo bo);

    /**
     * 线索更新
     * @author DB
     * @since 2024/2/20
     * @param bo 请求对象
     */
    void clueUpdate(ClueUpdateBo bo);

    /**
     * 线索更新记录
     * @author DB
     * @since 2024/2/20
     * @param clueId 线索id
     * @return ClueUpdateVo
     */
    ClueUpdateVo getClueUpdateRecord(String clueId);

    /**
     * 线索延期
     * @author DB
     * @since 2024/2/20
     * @param bo 请求对象
     */
    void cluePutOff(CluePutOffBo bo);

    /**
     * 线索延期记录
     * @author DB
     * @since 2024/2/20
     * @param clueId 线索id
     * @return R<List<CluePutOffVo>>
     */
    List<CluePutOffVo> getCluePutOffRecord(String clueId);

    /**
     * 线索脱离
     * @author DB
     * @since 2024/2/20
     * @param id 线索id
     */
    void clueDetachment(String id);

    /**
     * 地区线索分页
     * @author DB
     * @since 2024/2/21
     * @param city 城市
     * @param brandId 品牌id
     * @param storeId 校区id
     * @param chargeOrPhone 负责人或手机号
     * @return Page<CluePageVo>
     */
    Page<CluePageVo> getAreaCluePage( String city, String brandId, String storeId, String chargeOrPhone);

    /**
     * 公共线索分页
     * @author DB
     * @since 2024/2/21
     * @param city 城市
     * @param brandId 品牌id
     * @param storeId 校区id
     * @param chargeOrPhone 负责人或手机号
     * @return Page<CluePageVo>
     */
    Page<CluePageVo> getPublicCluePage(String city, String brandId, String storeId, String chargeOrPhone);

    /**
     * 线索领取
     * @author DB
     * @since 2024/2/20
     * @param id 线索id
     */
    void clueCollection(String id);

    /**
     * 我的开发分页
     * @author DB
     * @since 2024/2/21
     * @param city 城市
     * @param brandId 品牌id
     * @param storeId 校区id
     * @param chargeOrPhone 负责人或手机号
     * @return Page<CluePageVo>
     */
    Page<CluePageVo> getMyDevCluePage(String city, String brandId, String storeId, String chargeOrPhone);
}
