package com.usky.sas.common.dahua;

import com.sun.jna.Callback;
import com.sun.jna.Library;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import java.util.Arrays;
import java.util.List;

public interface NetSDKLib extends Library {
    int NET_SERIALNO_LEN = 48;
    int MAX_LOG_PATH_LEN = 260;
    int NET_MAX_SAERCH_IP_NUM = 256;
    int NET_COMMON_STRING_64 = 64;
    int NET_USER_NAME_LENGTH_EX = 16;
    int NET_MACHINE_NAME_NUM = 64;
    int NET_MACADDR_LEN = 40;
    int NET_DEV_TYPE_LEN = 32;
    int NET_DEV_SERIALNO_LEN = 48;
    int NET_MAX_URL_LEN = 128;
    int NET_MAX_STRING_LEN = 128;
    int NET_DEV_ID_LEN_EX = 128;
    int NET_DEV_NAME_LEN = 128;
    int NET_COMMON_STRING_512 = 512;
    int NET_DEV_CLASS_LEN = 16;
    int NET_MAX_IPADDR_LEN = 16;
    int NET_COMMON_STRING_128 = 128;
    int NET_COMMON_STRING_32 = 32;

    boolean CLIENT_Init(Callback var1, Pointer var2);

    void CLIENT_Cleanup();

    void CLIENT_SetAutoReconnect(Callback var1, Pointer var2);

    int CLIENT_GetLastError();

    void CLIENT_SetConnectTime(int var1, int var2);

    void CLIENT_SetNetworkParam(NET_PARAM var1);

    Long CLIENT_LoginWithHighLevelSecurity(NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY var1, NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY var2);

    boolean CLIENT_Logout(Long var1);

    Long CLIENT_StartSearchDevicesEx(Pointer var1, Pointer var2);

    boolean CLIENT_SearchDevicesByIPs(DEVICE_IP_SEARCH_INFO var1, Callback var2, Pointer var3, String var4, int var5);

    boolean CLIENT_StopSearchDevices(Long var1);

    boolean CLIENT_LogOpen(LOG_SET_PRINT_INFO var1);

    boolean CLIENT_GetChannelInfo(Long var1, NET_IN_GET_CHANNEL_INFO var2, NET_OUT_GET_CHANNEL_INFO var3, int var4);

    Long CLIENT_StartRealPlay(Long var1, int var2, Pointer var3, int var4, Callback var5, Callback var6, Pointer var7, int var8);

    boolean CLIENT_StopRealPlay(Long var1);

    Long CLIENT_PlayBackByTimeEx(Long var1, int var2, NET_TIME var3, NET_TIME var4, Pointer var5, Callback var6, Pointer var7, Callback var8, Pointer var9);

    Long CLIENT_PlayBackByDataType(Long var1, NET_IN_PLAYBACK_BY_DATA_TYPE var2, NET_OUT_PLAYBACK_BY_DATA_TYPE var3, int var4);

    boolean CLIENT_FastPlayBack(Long var1);

    boolean CLIENT_SlowPlayBack(Long var1);

    boolean CLIENT_SetPlayBackSpeed(Long var1, int var2);

    boolean CLIENT_MatrixGetCameras(Long var1, NET_IN_MATRIX_GET_CAMERAS var2, NET_OUT_MATRIX_GET_CAMERAS var3, int var4);

    boolean CLIENT_SetDeviceMode(Long var1, int var2, Pointer var3);

    boolean CLIENT_StopPlayBack(Long var1);

    public static class NET_REMOTE_DEVICE extends Structure {
        public int dwSize = this.size();
        public int bEnable;
        public byte[] szIp = new byte[16];
        public byte[] szUser = new byte[8];
        public byte[] szPwd = new byte[8];
        public int nPort;
        public int nDefinition;
        public int emProtocol;
        public byte[] szDevName = new byte[64];
        public int nVideoInputChannels;
        public int nAudioInputChannels;
        public byte[] szDevClass = new byte[32];
        public byte[] szDevType = new byte[32];
        public int nHttpPort;
        public int nMaxVideoInputCount;
        public int nRetVideoInputCount;
        public Pointer pstuVideoInputs;
        public byte[] szMachineAddress = new byte[256];
        public byte[] szSerialNo = new byte[48];
        public int nRtspPort;
        public byte[] szUserEx = new byte[32];
        public byte[] szPwdEx = new byte[32];
        public byte[] szVendorAbbr = new byte[32];
        public byte[] szSoftwareVersion = new byte[64];
        public NET_TIME stuActivationTime;
        public byte[] szMac = new byte[20];
        public int nHttpsPort;
        public byte[] byReserved = new byte[4];
        public Pointer pstuRemoteDevEx;

        public NET_REMOTE_DEVICE() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("dwSize", "bEnable", "szIp", "szUser", "szPwd", "nPort", "nDefinition", "emProtocol", "szDevName", "nVideoInputChannels", "nAudioInputChannels", "szDevClass", "szDevType", "nHttpPort", "nMaxVideoInputCount", "nRetVideoInputCount", "pstuVideoInputs", "szMachineAddress", "szSerialNo", "nRtspPort", "szUserEx", "szPwdEx", "szVendorAbbr", "szSoftwareVersion", "stuActivationTime", "szMac", "nHttpsPort", "byReserved", "pstuRemoteDevEx");
        }
    }

    public static class NET_MATRIX_CAMERA_INFO extends Structure {
        public int dwSize = this.size();
        public byte[] szName = new byte[128];
        public byte[] szDevID = new byte[128];
        public byte[] szszControlID = new byte[128];
        public int nChannelID;
        public int nUniqueChannel;
        public int bRemoteDevice;
        public NET_REMOTE_DEVICE stuRemoteDevice = new NET_REMOTE_DEVICE();
        public int emStreamType;
        public int emChannelType;
        public int bEnable;
        public int emVideoStream;

        public NET_MATRIX_CAMERA_INFO() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("dwSize", "szName", "szDevID", "szszControlID", "nChannelID", "nUniqueChannel", "bRemoteDevice", "stuRemoteDevice", "emStreamType", "emChannelType", "bEnable", "emVideoStream");
        }
    }

    public static class NET_IN_MATRIX_GET_CAMERAS extends Structure {
        public int dwSize = this.size();

        public NET_IN_MATRIX_GET_CAMERAS() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("dwSize");
        }
    }

    public static class NET_OUT_MATRIX_GET_CAMERAS extends Structure {
        public int dwSize = this.size();
        public Pointer pstuCameras;
        public int nMaxCameraCount;
        public int nRetCameraCount;

        public NET_OUT_MATRIX_GET_CAMERAS() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("dwSize", "pstuCameras", "nMaxCameraCount", "nRetCameraCount");
        }
    }

    public static class EM_REAL_DATA_TYPE extends Structure {
        public static final int EM_REAL_DATA_TYPE_PRIVATE = 0;
        public static final int EM_REAL_DATA_TYPE_GBPS = 1;
        public static final int EM_REAL_DATA_TYPE_TS = 2;
        public static final int EM_REAL_DATA_TYPE_MP4 = 3;
        public static final int EM_REAL_DATA_TYPE_H264 = 4;
        public static final int EM_REAL_DATA_TYPE_FLV_STREAM = 5;

        public EM_REAL_DATA_TYPE() {
        }
    }

    public static class NET_IN_PLAYBACK_BY_DATA_TYPE extends Structure {
        public int dwSize = this.size();
        public int nChannelID;
        public NET_TIME stStartTime;
        public NET_TIME stStopTime;
        public Pointer hWnd;
        public Callback cbDownLoadPos;
        public Pointer dwPosUser;
        public Callback fDownLoadDataCallBack;
        public int emDataType;
        public Pointer dwDataUser;
        public int nPlayDirection;
        public int emAudioType;
        public Callback fDownLoadDataCallBackEx;

        public NET_IN_PLAYBACK_BY_DATA_TYPE() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("dwSize", "nChannelID", "stStartTime", "stStopTime", "hWnd", "cbDownLoadPos", "dwPosUser", "fDownLoadDataCallBack", "emDataType", "dwDataUser", "nPlayDirection", "emAudioType", "fDownLoadDataCallBackEx");
        }
    }

    public static class NET_OUT_PLAYBACK_BY_DATA_TYPE extends Structure {
        public int dwSize = this.size();

        public NET_OUT_PLAYBACK_BY_DATA_TYPE() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("dwSize");
        }
    }

    public static class NET_IN_GET_CHANNEL_INFO extends Structure {
        public int dwSize = this.size();
        public byte[] szDeviceID = new byte[128];

        public NET_IN_GET_CHANNEL_INFO() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("dwSize", "szDeviceID");
        }
    }

    public static class NET_OUT_GET_CHANNEL_INFO extends Structure {
        public int dwSize = this.size();
        public int nMaxCount;
        public int nRetCount;
        public Pointer pstuChannelInfo;

        public NET_OUT_GET_CHANNEL_INFO() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("dwSize", "nMaxCount", "nRetCount", "pstuChannelInfo");
        }
    }

    public static class NET_GET_CHANNEL_INFO extends Structure {
        public int nRemoteChannel;
        public int nLogicChannel;
        public byte[] szName = new byte[128];
        public byte[] szDetail = new byte[512];
        public byte[] szDeviceType = new byte[64];
        public byte[] szDeviceClass = new byte[16];
        public byte[] szIP = new byte[16];
        public byte[] szMac = new byte[40];
        public byte[] szSerialNo = new byte[48];
        public byte[] szDevSoftVersion = new byte[128];
        public int nVideoInputCh;
        public int nVideoOutputCh;
        public int nAudioInputCh;
        public int nAudioOutputCh;
        public int nAlarmInputCh;
        public int nAlarmOutputCh;
        public byte byOnline;
        public byte byUsed;
        public byte[] byReserved = new byte[510];

        public NET_GET_CHANNEL_INFO() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("nRemoteChannel", "nLogicChannel", "szName", "szDetail", "szDeviceType", "szDeviceClass", "szIP", "szMac", "szSerialNo", "szDevSoftVersion", "nVideoInputCh", "nVideoOutputCh", "nAudioInputCh", "nAudioOutputCh", "nAlarmInputCh", "nAlarmOutputCh", "byOnline", "byUsed", "byReserved");
        }
    }

    public static class NET_PARAM extends Structure {
        public int nWaittime;
        public int nConnectTime;
        public int nConnectTryNum;
        public int nSubConnectSpaceTime;
        public int nGetDevInfoTime;
        public int nConnectBufSize;
        public int nGetConnInfoTime;
        public int nSearchRecordTime;
        public int nsubDisconnetTime;
        public byte byNetType;
        public byte byPlaybackBufSize;
        public byte bDetectDisconnTime;
        public byte bKeepLifeInterval;
        public int nPicBufSize;
        public short wBSIDLowPowerSubDisconnTime;
        public byte[] bReserved = new byte[2];

        public NET_PARAM() {
        }
    }

    public static class EM_USEDEV_MODE extends Structure {
        public static final int NET_TALK_CLIENT_MODE = 0;
        public static final int NET_TALK_SERVER_MODE = 1;
        public static final int NET_TALK_ENCODE_TYPE = 2;
        public static final int NET_ALARM_LISTEN_MODE = 3;
        public static final int NET_CONFIG_AUTHORITY_MODE = 4;
        public static final int NET_TALK_TALK_CHANNEL = 5;
        public static final int NET_RECORD_STREAM_TYPE = 6;
        public static final int NET_TALK_SPEAK_PARAM = 7;
        public static final int NET_RECORD_TYPE = 8;
        public static final int NET_TALK_MODE3 = 9;
        public static final int NET_PLAYBACK_REALTIME_MODE = 10;
        public static final int NET_TALK_TRANSFER_MODE = 11;
        public static final int NET_TALK_VT_PARAM = 12;
        public static final int NET_TARGET_DEV_ID = 13;

        public EM_USEDEV_MODE() {
        }
    }

    public static class NET_TIME extends Structure {
        public int dwYear;
        public int dwMonth;
        public int dwDay;
        public int dwHour;
        public int dwMinute;
        public int dwSecond;

        protected List<String> getFieldOrder() {
            return Arrays.asList("dwYear", "dwMonth", "dwDay", "dwHour", "dwMinute", "dwSecond");
        }

        public NET_TIME() {
            this.dwYear = 0;
            this.dwMonth = 0;
            this.dwDay = 0;
            this.dwHour = 0;
            this.dwMinute = 0;
            this.dwSecond = 0;
        }

        public void setTime(int year, int month, int day, int hour, int minute, int second) {
            this.dwYear = year;
            this.dwMonth = month;
            this.dwDay = day;
            this.dwHour = hour;
            this.dwMinute = minute;
            this.dwSecond = second;
        }

        public NET_TIME(NET_TIME other) {
            this.dwYear = other.dwYear;
            this.dwMonth = other.dwMonth;
            this.dwDay = other.dwDay;
            this.dwHour = other.dwHour;
            this.dwMinute = other.dwMinute;
            this.dwSecond = other.dwSecond;
        }

        public String toStringTime() {
            return String.format("%02d/%02d/%02d %02d:%02d:%02d", this.dwYear, this.dwMonth, this.dwDay, this.dwHour, this.dwMinute, this.dwSecond);
        }

        public String toStringTimeEx() {
            return String.format("%02d-%02d-%02d %02d:%02d:%02d", this.dwYear, this.dwMonth, this.dwDay, this.dwHour, this.dwMinute, this.dwSecond);
        }

        public String toString() {
            return String.format("%02d%02d%02d%02d%02d%02d", this.dwYear, this.dwMonth, this.dwDay, this.dwHour, this.dwMinute, this.dwSecond);
        }
    }

    public static class NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY extends Structure {
        public int dwSize = this.size();
        public byte[] szIP = new byte[64];
        public int nPort;
        public byte[] szUserName = new byte[64];
        public byte[] szPassword = new byte[64];
        public int emSpecCap;
        public byte[] byReserved = new byte[4];
        public Pointer pCapParam;
        public int emTLSCap;
        public byte[] szLocalIP = new byte[64];

        public NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("dwSize", "szIP", "nPort", "szUserName", "szPassword", "emSpecCap", "byReserved", "pCapParam", "emTLSCap", "szLocalIP");
        }
    }

    public static class DEVICE_NET_INFO_EX2 extends Structure {
        public DEVICE_NET_INFO_EX stuDevInfo;
        public byte[] szLocalIP = new byte[64];
        public byte[] szDeviceSubClass = new byte[16];
        public byte[] szSID = new byte[32];
        public byte byRole;
        public byte[] szReserved = new byte[3];
        public int nBridgeNetCardsMacListNum;
        public NET_BRIDGE_NET_CARDS_MAC_LIST[] stuBridgeNetCardsMacList = new NET_BRIDGE_NET_CARDS_MAC_LIST[64];
        public byte[] cReserved = new byte[1992];

        public DEVICE_NET_INFO_EX2() {
        }
    }

    public static class NET_DEVICEINFO_Ex extends Structure {
        public byte[] sSerialNumber = new byte[48];
        public int byAlarmInPortNum;
        public int byAlarmOutPortNum;
        public int byDiskNum;
        public int byDVRType;
        public int byChanNum;
        public byte byLimitLoginTime;
        public byte byLeftLogTimes;
        public byte[] bReserved = new byte[2];
        public int byLockLeftTime;
        public byte[] Reserved = new byte[4];
        public int nNTlsPort;
        public byte[] Reserved2 = new byte[16];

        public NET_DEVICEINFO_Ex() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("sSerialNumber", "byAlarmInPortNum", "byAlarmOutPortNum", "byDiskNum", "byDVRType", "byChanNum", "byLimitLoginTime", "byLeftLogTimes", "bReserved", "byLockLeftTime", "Reserved", "nNTlsPort", "Reserved2");
        }
    }

    public static class DEVICE_IP_SEARCH_INFO extends Structure {
        public int dwSize = this.size();
        public int nIpNum;
        public DEVICE_IP[] szIPArr = (DEVICE_IP[])(new DEVICE_IP()).toArray(256);
        public fSearchDevicesCBEx cbSearchDevicesEx;

        public DEVICE_IP_SEARCH_INFO() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("dwSize", "nIpNum", "szIPArr", "cbSearchDevicesEx");
        }
    }

    public static class DEVICE_IP extends Structure {
        public byte[] szIP = new byte[64];

        public DEVICE_IP() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("szIP");
        }
    }

    public static class NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY extends Structure {
        public int dwSize = this.size();
        public NET_DEVICEINFO_Ex stuDeviceInfo;
        public int nError;
        public byte[] byReserved = new byte[132];

        public NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("dwSize", "stuDeviceInfo", "nError", "byReserved");
        }
    }

    public static class DEVICE_NET_INFO_EX extends Structure {
        public int iIPVersion;
        public byte[] szIP = new byte[64];
        public int nPort;
        public byte[] szSubmask = new byte[64];
        public byte[] szGateway = new byte[64];
        public byte[] szMac = new byte[40];
        public byte[] szDeviceType = new byte[32];
        public byte byManuFactory;
        public byte byDefinition;
        public byte bDhcpEn;
        public byte byReserved1;
        public byte[] verifyData = new byte[88];
        public byte[] szSerialNo = new byte[48];
        public byte[] szDevSoftVersion = new byte[128];
        public byte[] szDetailType = new byte[32];
        public byte[] szVendor = new byte[128];
        public byte[] szDevName = new byte[64];
        public byte[] szUserName = new byte[16];
        public byte[] szPassWord = new byte[16];
        public short nHttpPort;
        public short wVideoInputCh;
        public short wRemoteVideoInputCh;
        public short wVideoOutputCh;
        public short wAlarmInputCh;
        public short wAlarmOutputCh;
        public int bNewWordLen;
        public byte[] szNewPassWord = new byte[64];
        public byte byInitStatus;
        public byte byPwdResetWay;
        public byte bySpecialAbility;
        public byte[] szNewDetailType = new byte[64];
        public int bNewUserName;
        public byte[] szNewUserName = new byte[64];
        public byte byPwdFindVersion;
        public byte[] szDeviceID = new byte[24];
        public int dwUnLoginFuncMask;
        public byte[] szMachineGroup = new byte[64];
        public int emIPVersionFrom;
        public byte[] szCountryCode = new byte[3];
        public byte byAbroadInfo;
        public byte[] cReserved = new byte[4];

        public DEVICE_NET_INFO_EX(Pointer p) {
            super(p);
        }

        public DEVICE_NET_INFO_EX() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("iIPVersion", "szIP", "nPort", "szSubmask", "szGateway", "szMac", "szDeviceType", "byManuFactory", "byDefinition", "bDhcpEn", "byReserved1", "verifyData", "szSerialNo", "szDevSoftVersion", "szDetailType", "szVendor", "szDevName", "szUserName", "szPassWord", "nHttpPort", "wVideoInputCh", "wRemoteVideoInputCh", "wVideoOutputCh", "wAlarmInputCh", "wAlarmOutputCh", "bNewWordLen", "szNewPassWord", "byInitStatus", "byPwdResetWay", "bySpecialAbility", "szNewDetailType", "bNewUserName", "szNewUserName", "byPwdFindVersion", "szDeviceID", "dwUnLoginFuncMask", "szMachineGroup", "emIPVersionFrom", "szCountryCode", "byAbroadInfo", "cReserved");
        }
    }

    public static class LOG_SET_PRINT_INFO extends Structure {
        public int dwSize = this.size();
        public int bSetFilePath;
        public byte[] szLogFilePath = new byte[260];
        public int bSetFileSize;
        public int nFileSize;
        public int bSetFileNum;
        public int nFileNum;
        public int bSetPrintStrategy;
        public int nPrintStrategy;
        public byte[] byReserved = new byte[4];
        public Pointer cbSDKLogCallBack;
        public Pointer dwUser;

        public LOG_SET_PRINT_INFO() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("dwSize", "bSetFilePath", "szLogFilePath", "bSetFileSize", "nFileSize", "bSetFileNum", "nFileNum", "bSetPrintStrategy", "nPrintStrategy", "byReserved", "cbSDKLogCallBack", "dwUser");
        }
    }

    public static class NET_RealPlayType extends Structure {
        public static final int NET_RType_Realplay = 0;
        public static final int NET_RType_Multiplay = 1;
        public static final int NET_RType_Realplay_0 = 2;
        public static final int NET_RType_Realplay_1 = 3;
        public static final int NET_RType_Realplay_2 = 4;
        public static final int NET_RType_Realplay_3 = 5;
        public static final int NET_RType_Multiplay_1 = 6;
        public static final int NET_RType_Multiplay_4 = 7;
        public static final int NET_RType_Multiplay_8 = 8;
        public static final int NET_RType_Multiplay_9 = 9;
        public static final int NET_RType_Multiplay_16 = 10;
        public static final int NET_RType_Multiplay_6 = 11;
        public static final int NET_RType_Multiplay_12 = 12;
        public static final int NET_RType_Multiplay_25 = 13;
        public static final int NET_RType_Multiplay_36 = 14;
        public static final int NET_RType_Multiplay_64 = 15;
        public static final int NET_RType_Multiplay_255 = 16;
        public static final int NET_RType_Realplay_Audio = 17;
        public static final int NET_RType_Realplay_Test = 255;

        public NET_RealPlayType() {
        }

        protected List<String> getFieldOrder() {
            return Arrays.asList("NET_RType_Realplay", "NET_RType_Multiplay", "NET_RType_Realplay_0", "NET_RType_Realplay_1", "NET_RType_Realplay_2", "NET_RType_Realplay_3", "NET_RType_Multiplay_1", "NET_RType_Multiplay_4", "NET_RType_Multiplay_8", "NET_RType_Multiplay_9", "NET_RType_Multiplay_16", "NET_RType_Multiplay_6", "NET_RType_Multiplay_12", "NET_RType_Multiplay_25", "NET_RType_Multiplay_36", "NET_RType_Multiplay_64", "NET_RType_Multiplay_255", "NET_RType_Realplay_Audio", "NET_RType_Realplay_Test");
        }
    }

    public interface fDataCallBack extends Callback {
        void invoke(Long var1, int var2, Pointer var3, int var4, Pointer var5);
    }

    public interface fDisConnect extends Callback {
        void invoke(Long var1, String var2, int var3, Pointer var4);
    }

    public interface fRealDataCallBackEx extends Callback {
        void invoke(Long var1, int var2, Pointer var3, int var4, int var5, Pointer var6);
    }

    public interface fSearchDevicesCBEx extends Callback {
        void invoke(Long var1, Pointer var2, Pointer var3);
    }
}
