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 com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
import org.apache.ibatis.annotations.*;
// import org.omg.PortableInterceptor.INACTIVE;
import org.springframework.stereotype.Repository;
import java.util.Collection;
import java.util.List;
@Mapper
@Repository
public interface StreamPushMapper {
    @Insert("INSERT INTO stream_push (app, stream, totalReaderCount, originType, originTypeStr, " +
            "pushTime, aliveSecond, mediaServerId, serverId, updateTime, createTime, pushIng, self) VALUES" +
            "(#{app}, #{stream}, #{totalReaderCount}, #{originType}, #{originTypeStr}, " +
            "#{pushTime}, #{aliveSecond}, #{mediaServerId} , #{serverId} , #{updateTime} , #{createTime}, " +
            "#{pushIng}, #{self} )")
    int add(StreamPushItem streamPushItem);
    @Update(value = {" "})
    int update(StreamPushItem streamPushItem);
    @Delete("DELETE FROM 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.gbId, gs.name, gs.longitude, gs.latitude FROM stream_push st LEFT JOIN gb_stream gs on st.app = gs.app AND st.stream = gs.stream order by st.createTime desc")
    List selectAll();
    @Select("SELECT st.*, gs.gbId, gs.name, gs.longitude, gs.latitude FROM stream_push st LEFT JOIN 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 stream_push")
    void clear();
    @Delete("DELETE sp FROM stream_push sp left join gb_stream gs on gs.app = sp.app and gs.stream= sp.stream WHERE sp.mediaServerId=#{mediaServerId} and gs.gbId is null ")
    void deleteWithoutGBId(String mediaServerId);
    @Select("SELECT * FROM stream_push WHERE mediaServerId=#{mediaServerId}")
    List selectAllByMediaServerId(String mediaServerId);
    @Select("SELECT sp.* FROM stream_push sp left join gb_stream gs on gs.app = sp.app and gs.stream= sp.stream WHERE sp.mediaServerId=#{mediaServerId} and gs.gbId is null")
    List selectAllByMediaServerIdWithOutGbID(String mediaServerId);
    @Update("UPDATE stream_push " +
            "SET status=#{status} " +
            "WHERE app=#{app} AND stream=#{stream}")
    int updateStatus(String app, String stream, boolean status);
    @Update("UPDATE stream_push " +
            "SET pushIng=#{pushIng} " +
            "WHERE app=#{app} AND stream=#{stream}")
    int updatePushStatus(String app, String stream, boolean pushIng);
    @Update("UPDATE stream_push " +
            "SET status=#{status} " +
            "WHERE mediaServerId=#{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 stream_push sp left join gb_stream gs on sp.app = gs.app AND sp.stream = gs.stream where sp.status = 1")
    List getOnlinePusherForGb();
    @Update("UPDATE stream_push SET status=0")
    void setAllStreamOffline();
    @Select("SELECT CONCAT(app,stream) FROM gb_stream")
    List getAllAppAndStream();
    @Select(value = {" "})
    ResourceBaceInfo getOverview(boolean pushIngAsOnline);
}