package hcnetsdk.sdkhub;

import com.hikvision.netsdk.AlarmCallBack_V30;
import com.hikvision.netsdk.HCNetSDK;
import com.hikvision.netsdk.NET_DVR_ALARMER;
import com.hikvision.netsdk.NET_DVR_BASE_ALARM;
import com.hikvision.netsdk.NET_DVR_SETUPALARM_PARAM;
import com.sun.jna.Pointer;

import java.io.Serializable;

import hcnetsdk.jna.HCNetSDKByJNA;
import hcnetsdk.jna.HCNetSDKJNAInstance;

public class DevAlarmGuider implements Serializable {

    public class CGReturn {
        public byte[] time = new byte[32];
        public byte[] ip = new byte[128];
        public int command = 0;
        public int result = 0;
    }

    CGReturn ret = new CGReturn();
    public int iAlarmHandle = -1;
    private static AlarmCallBack_V30 AlarmCbf = null;

    private static void processAlarmData(int lCommand, NET_DVR_ALARMER Alarmer, NET_DVR_BASE_ALARM AlarmInfo) {
        String sIP = new String(Alarmer.sDeviceIP);
        System.out.println("recv alarm from:" + sIP);
    }

    public CGReturn Test_SetupAlarm_jni(int iUserID) {
        //甯冮槻
        NET_DVR_SETUPALARM_PARAM struSetupAlarmParam = new NET_DVR_SETUPALARM_PARAM();
        struSetupAlarmParam.byAlarmInfoType = 1;
        struSetupAlarmParam.byLevel = 1;
        iAlarmHandle = HCNetSDK.getInstance().NET_DVR_SetupAlarmChan_V41(iUserID, struSetupAlarmParam);
        if (-1 == iAlarmHandle) {
            ret.result = 0;
            System.out.println("NET_DVR_SetupAlarmChan_V41 failed!" + MessageCodeHub.INSTANCE.getErrorCode());
        } else {
            ret.result = 1;
            System.out.println("NET_DVR_SetupAlarmChan_V41 succeed!");
        }
        ret.command = 12368;
        return ret;
    }

    public CGReturn Test_SetupAlarm_V41_jna(int iUserID) {
        //甯冮槻
        HCNetSDKByJNA.NET_DVR_SETUPALARM_PARAM struSetupAlarmParam = new HCNetSDKByJNA.NET_DVR_SETUPALARM_PARAM();
        struSetupAlarmParam.byAlarmInfoType = 1;
        struSetupAlarmParam.byLevel = 1;
        iAlarmHandle = HCNetSDKJNAInstance.getInstance().NET_DVR_SetupAlarmChan_V41(iUserID, struSetupAlarmParam.getPointer());
        if (-1 == iAlarmHandle) {
            ret.result = 0;
            System.out.println("NET_DVR_SetupAlarmChan_V41 failed!" + MessageCodeHub.INSTANCE.getErrorCode());
        } else {
            ret.result = 1;
            System.out.println("NET_DVR_SetupAlarmChan_V41 succeed!");
        }
        ret.command = 12368;
        return ret;
    }

    public CGReturn Test_SetupAlarm_V50_jna(int iUserID) {
        //甯冮槻
        HCNetSDKByJNA.NET_DVR_SETUPALARM_PARAM_V50 struSetupAlarmParam_V50 = new HCNetSDKByJNA.NET_DVR_SETUPALARM_PARAM_V50();
        struSetupAlarmParam_V50.dwSize = struSetupAlarmParam_V50.size();
        struSetupAlarmParam_V50.byAlarmInfoType = 1;
        struSetupAlarmParam_V50.byRetAlarmTypeV40 = 1;
        struSetupAlarmParam_V50.byRetDevInfoVersion = 1;
        struSetupAlarmParam_V50.byRetVQDAlarmType = 1;
        struSetupAlarmParam_V50.byFaceAlarmDetection = 1;
        struSetupAlarmParam_V50.bySupport = 4;
        struSetupAlarmParam_V50.byLevel = 1;
        iAlarmHandle = HCNetSDKJNAInstance.getInstance().NET_DVR_SetupAlarmChan_V50(iUserID, struSetupAlarmParam_V50.getPointer(), Pointer.NULL, 0);
        if (-1 == iAlarmHandle) {
            ret.result = 0;
            System.out.println("NET_DVR_SetupAlarmChan_V50 failed!" + MessageCodeHub.INSTANCE.getErrorCode());
        } else {
            ret.result = 1;
            System.out.println("NET_DVR_SetupAlarmChan_V50 succeed!");
        }
        ret.command = 12368;
        return ret;
    }

    public CGReturn Test_CloseAlarm_jni(int iAlarmHandle) {
        if (!HCNetSDK.getInstance().NET_DVR_CloseAlarmChan_V30(iAlarmHandle)) {
            ret.result = 0;
            System.out.println("NET_DVR_CloseAlarmChan_V30 failed! error:" + MessageCodeHub.INSTANCE.getErrorCode());
        } else {
            ret.result = 1;
            System.out.println("NET_DVR_CloseAlarmChan_V30 succeed!");
        }
        return ret;
    }

    public CGReturn Test_CloseAlarm_jna(int iAlarmHandle) {
        if (!HCNetSDKJNAInstance.getInstance().NET_DVR_CloseAlarmChan_V30(iAlarmHandle)) {
            ret.result = 0;
            System.out.println("NET_DVR_CloseAlarmChan_V30 failed! error:" + MessageCodeHub.INSTANCE.getErrorCode());
        } else {
            ret.result = 1;
            System.out.println("NET_DVR_CloseAlarmChan_V30 succeed!");
        }
        return ret;
    }
}
