package com.yfd.monitor.storager.dao;

import com.yfd.monitor.media.zlm.dto.MediaServerItem;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;


@Mapper
@Repository
public interface MediaServerMapper {

    @Insert("INSERT INTO mon_media_server (" +
            "id, " +
            "ip, " +
            "hookIp, " +
            "sdpIp, " +
            "streamIp, " +
            "httpPort, " +
            "httpSSlPort, " +
            "rtmpPort, " +
            "rtmpSSlPort, " +
            "rtpProxyPort, " +
            "rtspPort, " +
            "rtspSSLPort, " +
            "autoConfig, " +
            "secret, " +
            "rtpEnable, " +
            "rtpPortRange, " +
            "recordAssistPort, " +
            "defaultServer, " +
            "createTime, " +
            "updateTime, " +
            "hookAliveInterval" +
            ") VALUES " +
            "(" +
            "#{id}, " +
            "#{ip}, " +
            "#{hookIp}, " +
            "#{sdpIp}, " +
            "#{streamIp}, " +
            "#{httpPort}, " +
            "#{httpSSlPort}, " +
            "#{rtmpPort}, " +
            "#{rtmpSSlPort}, " +
            "#{rtpProxyPort}, " +
            "#{rtspPort}, " +
            "#{rtspSSLPort}, " +
            "#{autoConfig}, " +
            "#{secret}, " +
            "#{rtpEnable}, " +
            "#{rtpPortRange}, " +
            "#{recordAssistPort}, " +
            "#{defaultServer}, " +
            "#{createTime}, " +
            "#{updateTime}, " +
            "#{hookAliveInterval})")
    int add(MediaServerItem mediaServerItem);

    @Update(value = {" <script>" +
            "UPDATE mon_media_server " +
            "SET updateTime=#{updateTime}" +
            "<if test=\"ip != null\">, ip=#{ip}</if>" +
            "<if test=\"hookIp != null\">, hookIp=#{hookIp}</if>" +
            "<if test=\"sdpIp != null\">, sdpIp=#{sdpIp}</if>" +
            "<if test=\"streamIp != null\">, streamIp=#{streamIp}</if>" +
            "<if test=\"httpPort != null\">, httpPort=#{httpPort}</if>" +
            "<if test=\"httpSSlPort != null\">, httpSSlPort=#{httpSSlPort}</if>" +
            "<if test=\"rtmpPort != null\">, rtmpPort=#{rtmpPort}</if>" +
            "<if test=\"rtmpSSlPort != null\">, rtmpSSlPort=#{rtmpSSlPort}</if>" +
            "<if test=\"rtpProxyPort != null\">, rtpProxyPort=#{rtpProxyPort}</if>" +
            "<if test=\"rtspPort != null\">, rtspPort=#{rtspPort}</if>" +
            "<if test=\"rtspSSLPort != null\">, rtspSSLPort=#{rtspSSLPort}</if>" +
            "<if test=\"autoConfig != null\">, autoConfig=#{autoConfig}</if>" +
            "<if test=\"rtpEnable != null\">, rtpEnable=#{rtpEnable}</if>" +
            "<if test=\"rtpPortRange != null\">, rtpPortRange=#{rtpPortRange}</if>" +
            "<if test=\"secret != null\">, secret=#{secret}</if>" +
            "<if test=\"recordAssistPort != null\">, recordAssistPort=#{recordAssistPort}</if>" +
            "<if test=\"hookAliveInterval != null\">, hookAliveInterval=#{hookAliveInterval}</if>" +
            "WHERE id=#{id}"+
            " </script>"})
    int update(MediaServerItem mediaServerItem);

    @Update(value = {" <script>" +
            "UPDATE mon_media_server " +
            "SET updateTime=#{updateTime}" +
            "<if test=\"id != null\">, id=#{id}</if>" +
            "<if test=\"hookIp != null\">, hookIp=#{hookIp}</if>" +
            "<if test=\"sdpIp != null\">, sdpIp=#{sdpIp}</if>" +
            "<if test=\"streamIp != null\">, streamIp=#{streamIp}</if>" +
            "<if test=\"httpSSlPort != null\">, httpSSlPort=#{httpSSlPort}</if>" +
            "<if test=\"rtmpPort != null\">, rtmpPort=#{rtmpPort}</if>" +
            "<if test=\"rtmpSSlPort != null\">, rtmpSSlPort=#{rtmpSSlPort}</if>" +
            "<if test=\"rtpProxyPort != null\">, rtpProxyPort=#{rtpProxyPort}</if>" +
            "<if test=\"rtspPort != null\">, rtspPort=#{rtspPort}</if>" +
            "<if test=\"rtspSSLPort != null\">, rtspSSLPort=#{rtspSSLPort}</if>" +
            "<if test=\"autoConfig != null\">, autoConfig=#{autoConfig}</if>" +
            "<if test=\"rtpEnable != null\">, rtpEnable=#{rtpEnable}</if>" +
            "<if test=\"rtpPortRange != null\">, rtpPortRange=#{rtpPortRange}</if>" +
            "<if test=\"secret != null\">, secret=#{secret}</if>" +
            "<if test=\"recordAssistPort != null\">, recordAssistPort=#{recordAssistPort}</if>" +
            "<if test=\"hookAliveInterval != null\">, hookAliveInterval=#{hookAliveInterval}</if>" +
            "WHERE ip=#{ip} and httpPort=#{httpPort}"+
            " </script>"})
    int updateByHostAndPort(MediaServerItem mediaServerItem);

    @Select("SELECT * FROM mon_media_server WHERE id=#{id}")
    MediaServerItem queryOne(String id);

    @Select("SELECT * FROM mon_media_server")
    List<MediaServerItem> queryAll();

    @Delete("DELETE FROM mon_media_server WHERE id=#{id}")
    void delOne(String id);

    @Select("DELETE FROM mon_media_server WHERE ip=#{host} and httpPort=#{port}")
    void delOneByIPAndPort(String host, int port);

    @Delete("DELETE FROM mon_media_server WHERE defaultServer=1")
    int delDefault();

    @Select("SELECT * FROM mon_media_server WHERE ip=#{host} and httpPort=#{port}")
    MediaServerItem queryOneByHostAndPort(String host, int port);

    @Select("SELECT * FROM mon_media_server WHERE defaultServer=1")
    MediaServerItem queryDefault();

    @Select("SELECT * FROM wvp_media_server WHERE record_assist_port > 0")
    List<MediaServerItem> queryAllWithAssistPort();
}
