package com.genersoft.iot.vmp.storager.dao;
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface StreamPushMapper {
    @Insert("INSERT INTO wvp_stream_push (app, stream, total_reader_count, origin_type, origin_type_str, " +
            "push_time, alive_second, media_server_id, update_time, create_time, push_ing, self) VALUES" +
            "(#{app}, #{stream}, #{totalReaderCount}, #{originType}, #{originTypeStr}, " +
            "#{pushTime}, #{aliveSecond}, #{mediaServerId} , #{updateTime} , #{createTime}, " +
            "#{pushIng}, #{self} )")
    int add(StreamPushItem streamPushItem);
    @Update(value = {" "})
    int update(StreamPushItem streamPushItem);
    @Delete("DELETE FROM wvp_stream_push WHERE app=#{app} AND stream=#{stream}")
    int del(String app, String stream);
    @Delete("")
    int delAllWithoutGBId(List streamPushItems);
    @Delete("")
    int delAll(List streamPushItems);
    @Delete("")
    int delAllForGbStream(List gbStreams);
    @Select(value = {" "})
    List selectAllForList(String query, Boolean pushing, String mediaServerId);
    @Select("SELECT st.*, gs.gb_id, gs.name, gs.longitude, gs.latitude FROM wvp_stream_push st LEFT join wvp_gb_stream gs on st.app = gs.app AND st.stream = gs.stream order by st.create_time desc")
    List selectAll();
    @Select("SELECT st.*, gs.gb_id, gs.name, gs.longitude, gs.latitude FROM wvp_stream_push st LEFT join wvp_gb_stream gs on st.app = gs.app AND st.stream = gs.stream WHERE st.app=#{app} AND st.stream=#{stream}")
    StreamPushItem selectOne(String app, String stream);
    @Insert("")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    int addAll(List streamPushItems);
    @Delete("DELETE FROM wvp_stream_push")
    void clear();
    @Delete("delete" +
            " from wvp_stream_push " +
            " where id in " +
            "   (select temp.id from " +
            "       (select wgs.gb_stream_id as id " +
            "          from wvp_gb_stream wgs" +
            "               left join wvp_stream_push sp on sp.id = wgs.gb_stream_id" +
            "           where wgs.gb_id is null and wgs.media_server_id = #{mediaServerId}) temp)"
            )
    void deleteWithoutGBId(String mediaServerId);
    @Select("SELECT * FROM wvp_stream_push WHERE media_server_id=#{mediaServerId}")
    List selectAllByMediaServerId(String mediaServerId);
    @Select("SELECT sp.* FROM wvp_stream_push sp left join wvp_gb_stream gs on gs.app = sp.app and gs.stream= sp.stream WHERE sp.media_server_id=#{mediaServerId} and gs.gb_id is null")
    List selectAllByMediaServerIdWithOutGbID(String mediaServerId);
    @Update("UPDATE wvp_stream_push " +
            "SET status=#{status} " +
            "WHERE app=#{app} AND stream=#{stream}")
    int updateStatus(String app, String stream, boolean status);
    @Update("UPDATE wvp_stream_push " +
            "SET push_ing=#{pushIng} " +
            "WHERE app=#{app} AND stream=#{stream}")
    int updatePushStatus(String app, String stream, boolean pushIng);
    @Update("UPDATE wvp_stream_push " +
            "SET status=#{status} " +
            "WHERE media_server_id=#{mediaServerId}")
    void updateStatusByMediaServerId(String mediaServerId, boolean status);
    @Select("")
    List getOnlinePusherForGbInList(List offlineStreams);
    @Update("")
    void offline(List offlineStreams);
    @Select("")
    List getOfflinePusherForGbInList(List onlineStreams);
    @Update("")
    void online(List onlineStreams);
    @Select("SELECT gs.* FROM wvp_stream_push sp left join wvp_gb_stream gs on sp.app = gs.app AND sp.stream = gs.stream where sp.status = true")
    List getOnlinePusherForGb();
    @Update("UPDATE wvp_stream_push SET status=0")
    void setAllStreamOffline();
    @Select("SELECT CONCAT(app,stream) from wvp_gb_stream")
    List getAllAppAndStream();
    @Select("select count(1) from wvp_stream_push ")
    int getAllCount();
    @Select(value = {" "})
    int getAllOnline(Boolean usePushingAsStatus);
    @Select("")
    List getListIn(List streamPushItems);
}