package com.cool.store.mapper;

import com.cool.store.dto.message.RemindInterviewMsgDTO;
import com.cool.store.dto.partner.AdvanceLineDTO;
import com.cool.store.dto.partner.PartnerInterviewInfoDTO;
import com.cool.store.dto.partner.SpecialDateRangeInterviewCountDTO;
import com.cool.store.entity.HyPartnerInterviewPlanDO;
import com.cool.store.request.GetInterviewListReq;
import com.cool.store.vo.EnterpriseUserBaseInfoVO;
import com.cool.store.vo.interview.InterviewVO;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @author zhangchenbiao
 * @date 2023-05-29 03:52
 */
public interface HyPartnerInterviewPlanMapper {
    /**
     *
     * 默认插入方法，只会给有值的字段赋值
	 * 会对传进来的字段做判空处理，如果字段为空，则使用数据库默认字段或者null
     * dateTime:2023-05-29 03:52
     */
    int insertSelective(@Param("record") HyPartnerInterviewPlanDO record);

    /**
     *
     * 默认更新方法，根据主键更新，不会把null值更新到数据库，避免覆盖之前有值的
     * dateTime:2023-05-29 03:52
     */
    int updateByPrimaryKeySelective(@Param("record") HyPartnerInterviewPlanDO record);

    /**
     * 查询当天面试数量
     * @param userId
     * @param currentDate
     * @return
     */
    List<AdvanceLineDTO> getCurrentDateInterviewCount(@Param("userId") String userId, @Param("currentDate") String currentDate, String endDate);

    /**
     * todo 当天面试数据需要修改
     * 查询指定日期面试数量 与未来7天面试数量
     * @param userId
     * @param currentDate
     * @param startTime
     * @param endTime
     * @return
     */
    SpecialDateRangeInterviewCountDTO getInterviewCount(@Param("userId") String userId,
                                                        @Param("currentDate") String currentDate,
                                                        @Param("startTime") String startTime,
                                                        @Param("endTime") String endTime);
    /**
     * 查询面试列表
     * @param userId
     * @param currentDate
     * @return
     */
    List<HyPartnerInterviewPlanDO> getInterviewPlanList(@Param("userId") String userId,
                                                        @Param("currentTime") String currentTime,
                                                        @Param("currentDay") String currentDay);

    /**
     * 工作台 招商经理 预约面试时间 合格资格面试 列表
     * @param userId
     * @param workflowStage
     * @param workflowStatus
     * @return
     */
    List<PartnerInterviewInfoDTO> getPartnerInterviewInfoList(@Param("userId") String userId,
                                                              @Param("workflowStage") String workflowStage ,
                                                              @Param("workflowStatus") String workflowStatus,
                                                              @Param("filter") Boolean filter);

    /**
     * 查询面试列表
     *
     * @param request
     * @return
     */
    List<InterviewVO> getInterviewList(@Param("record") GetInterviewListReq request);

    /**
     * 查询面试详情
     *
     * @param interviewPlanId
     * @return
     */
    InterviewVO getInterviewInfo(String interviewPlanId);

    /**
     * 查询用户基本信息
     */
    EnterpriseUserBaseInfoVO getEnterpriseUserBaseInfo(@Param("userId") String userId);

    Long selectInterviewIdByLineId(Long lineId);

    /**
     * 根据条件字段查询面试安排信息
     * @param record
     * @return
     */
    List<HyPartnerInterviewPlanDO> selectBySelective(@Param("record") HyPartnerInterviewPlanDO record);

    /**
     * 根据线索
     * @param lindIds
     * @return
     */
    List<HyPartnerInterviewPlanDO> getHyPartnerInterviewPlanByLineIds(List<Long> lindIds);

    /**
     * 批量软删面试计划
     * @param interviewIds
     * @return
     */
    void batchDeleteInterviewPlans(@Param("interviewPlanIds")List<Long> interviewIds);

    /**
     * 通用更新房间状态方法
     * @param record
     * @param roomStatus
     */
    void updateInterviewRoomStatus(@Param("record") HyPartnerInterviewPlanDO record,@Param("roomStatus")Integer roomStatus);

    /**
     * 仅适用于开启面试房间
     * @param lineIds
     */
    void openInterviewRoom(@Param("lineIds") List<Long> lineIds,@Param("roomStatus")Integer roomStatu);

    /**
     * 仅适用于关闭面试房间
     * @param record
     * @param roomStatus
     */
    void closeInterviewRoom(@Param("record") HyPartnerInterviewPlanDO record,@Param("roomStatus")Integer roomStatus);

    /**
     * 修改面试实际开始时间
     */
    void updateActualStartTime(@Param("id") Long id, @Param("now") String now);

    /**
     * 获取面试房间状态
     * @param interviewPlanId
     */
    Integer getRoomStatus(@Param("interviewPlanId") String interviewPlanId);

    /**
     * 获取面试开始时间
     */
    String getInterviewStartTime(String interviewPlanId);

    /**
     * 根据面试计划id获取面试计划信息
     * @param interviewPlanId
     * @return
     */
    HyPartnerInterviewPlanDO getInterviewPlanById(String interviewPlanId);

    HyPartnerInterviewPlanDO getInterviewPlanByLineId(Long lineId);

    List<RemindInterviewMsgDTO> selectRemindInterviewPlan(@Param("startTime") Date startTime,
                                                          @Param("endTime") Date endTime,
                                                          @Param("workflowStage") String workflowStage,
                                                          @Param("workflowStatus") String workflowStatus);

    int updateLineId(@Param("newPartnerId") String newPartnerId, @Param("newLineId") Long newLineId, @Param("oldLineId") Long oldLineId);


}