package com.fs.live.mapper;


import com.fs.live.domain.Live;
import com.fs.live.vo.LiveListVo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * 直播Mapper接口
 *
 * @author fs
 * @date 2025-01-17
 */
public interface LiveMapper
{
    /**
     * 查询直播
     *
     * @param liveId 直播主键
     * @return 直播
     */
    public Live selectLiveByLiveId(Long liveId);

    /**
     * 查询企业直播
     * @param liveId        直播间ID
     * @param companyId     企业ID
     * @param companyUserId 企业用户ID
     * @return Live
     */
    Live selectLiveByLiveIdAndCompanyIdAndCompanyUserId(@Param("liveId") Long liveId, @Param("companyId") Long companyId, @Param("companyUserId") Long companyUserId);


    List<Live> selectLiveToStudent( @Param("liveName") String liveName,@Param("status") String status,@Param("startTime") String startTime,@Param("finishTime") String finishTime);

    /**
     * 查询直播列表
     *
     * @param live 直播
     * @return 直播集合
     */
    public List<Live> selectLiveList(Live live);

    /**
     * 新增直播
     *
     * @param live 直播
     * @return 结果
     */
    public int insertLive(Live live);

    /**
     * 修改直播
     *
     * @param live 直播
     * @return 结果
     */
    public int updateLive(Live live);

    /**
     * 删除直播
     *
     * @param liveId 直播主键
     * @return 结果
     */
    public int deleteLiveByLiveId(Long liveId);

    /**
     * 批量删除直播
     *
     * @param liveIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteLiveByLiveIds(Long[] liveIds);

    List<Live> liveList();

    @Select("select * from live where talent_id=#{talentId}")
    Live selectLiveByTalentId(@Param("talentId") String talentId);

    /**
     * 批量更新直播上下架状态
     * @return 更新记录数
     */
    int updateBatchLiveList(@Param("liveVo") LiveListVo liveVo);

    /**
     * 批量更新直播
     * @return 更新记录数
     */
    int updateLiveList(@Param("liveList") List<Live> liveVo);
    /**
     * 批量删除直播
     * @return 更新记录数
     */
    int deleteBatchLiveList(@Param("liveVo") LiveListVo listVo);

    /**
     * 找一个最近的直播间
     * @return 直播间
     */
    Live selectLiveOne(String s);


    int handleShelfOrUnAdmin(@Param("liveVo") LiveListVo listVo);

    int handleDeleteSelectedAdmin(@Param("liveVo") LiveListVo listVo);

    /**
     * 查询没有结束的直播
     * @return 直播列表
     */
    @Select("select * from live where status != 3 and live_type in (2,3) and is_audit = 1")
    List<Live> selectNoEndLiveList();

    void updateStatusAndTimeBatchById(@Param("liveList") List<Live> list);

    @Select("select * from live where company_id = #{companyId} or company_id is null")
    List<Live> liveCompanyList(@Param("companyId") Long companyId);

    @Select("select * from live where live_id = #{liveId} and (company_id = #{companyId} or company_id is null)")
    Live selectLiveByLiveIdAndCompanyId(@Param("liveId") Long liveId,@Param("companyId") Long companyId);

    @Update("update live set is_audit = #{isAudit} where live_id = #{liveId}")
    Integer updateLiveIsAudit(Live live);

    List<Live> selectReadyStartLiveList();
}
