package com.hdl.sdk.hdl_sdk.activity;


import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Spinner;
import android.widget.TextView;


import com.hdl.sdk.hdl_core.HDLAppliances.Config.HDLApConfig;
import com.hdl.sdk.hdl_core.HDLAppliances.HDLSecurity.Parser.SecurityParser;
import com.hdl.sdk.hdl_core.HDLAppliances.HDLSecurity.SecurityArmingStateBackInfo;
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.AppliancesInfo;
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.SecurityStateBean;
import com.hdl.sdk.hdl_core.HDLDeviceManger.Core.HDLCommand;
import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.DeviceStateEvent;
import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.SecurityAlarmFeedBackEvent;
import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.SecurityArmingFeedBackEvent;
import com.hdl.sdk.hdl_sdk.R;
import com.hdl.sdk.hdl_sdk.base.BaseActivity;
import com.hdl.sdk.hdl_sdk.utlis.HDLLog;

import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

/**
 * 安防模块控制页面
 */
public class CtrlSecurityActivity extends BaseActivity {
    /**
     * Topbar
     */
//    private RelativeLayout topBarBack;
//    private TextView topBarTitle;
    private AppliancesInfo appliancesInfo;
    private Button btn_read_config, btn_set_arming, btn_send_alarm;
    private Spinner spinner_arming;
    //    private TextView tv_alarmFire, tv_alarmGas, tv_alarmSudden, tv_alarmEmergency, tv_alarmCurrent, tv_alarmSilent, tv_alarmPower, tv_alarmTemperature;
    private TextView tv_mes;
    private static final String[] armingTypeItems = {"假期布防", "离开布防", "夜间布防", "晚上有客布防", "白天布防", "撤防"};
    private int armingState;//布防状态  6 = 撤防 5 = 白天布防 4 = 晚上有客布防 3 = 夜间布防 2 = 离开布防 1 = 假期布防
    private SecurityStateBean mSecurityStateBean;

    private int alarmSendState;//发送测试报警

    /**
     * 复写isRegisterEventBus()  要注册使用EventBus,这里要设置返回true
     *
     * @return true
     */
    @Override
    protected boolean isRegisterEventBus() {
        return true;
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ctrl_security);

        initToolbar();
        initView();
        initOnClick();
        initcurState();
        //读布防状态
        HDLCommand.getSecurityStateFromNetwork(appliancesInfo);
    }

    /**
     * 初始化Toolbar
     */
    private void initToolbar() {
//        topBarBack = findViewById(R.id.ll_top_b_left);
//        setViewVisible(topBarBack);
//        topBarTitle = findViewById(R.id.tv_top_b_header_title);
//        topBarBack.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                finish();
//            }
//        });
//        topBarTitle.setText("安防模块演示");
    }

    /**
     * initView
     */
    private void initView() {
        btn_read_config = findViewById(R.id.btn_read_config);
        btn_set_arming = findViewById(R.id.btn_set_arming);
        btn_send_alarm = findViewById(R.id.btn_send_alarm);
        spinner_arming = findViewById(R.id.spinner_arming);

//        tv_alarmFire = findViewById(R.id.tv_alarmFire);
//        tv_alarmGas = findViewById(R.id.tv_alarmGas);
//        tv_alarmSudden = findViewById(R.id.tv_alarmSudden);
//
//        tv_alarmEmergency = findViewById(R.id.tv_alarmEmergency);
//        tv_alarmCurrent = findViewById(R.id.tv_alarmCurrent);
//        tv_alarmSilent = findViewById(R.id.tv_alarmSilent);
//        tv_alarmPower = findViewById(R.id.tv_alarmPower);
//        tv_alarmTemperature = findViewById(R.id.tv_alarmTemperature);
        tv_mes = findViewById(R.id.tv_mes);

    }

    /**
     * initOnClick
     */
    private void initOnClick() {
        /**
         * 读布防状态
         */
        btn_read_config.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                HDLCommand.getSecurityStateFromNetwork(appliancesInfo);
            }
        });

        /**
         * 布防
         */
        btn_set_arming.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                /**
                 * 要先撤防后布防
                 */
                HDLCommand.securityArmingCtrl(appliancesInfo, armingState);
            }
        });

//        btn_send_alarm.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                alarmSendState++;
//                if (alarmSendState > 7) {
//                    alarmSendState = 0;
//                }
//                HDLCommand.securitySendAlarm(appliancesInfo, alarmSendState);
//            }
//        });

        ArrayAdapter<String> sp_CheckBitAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, armingTypeItems);
        sp_CheckBitAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner_arming.setAdapter(sp_CheckBitAdapter);
        spinner_arming.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                armingState = arg2 + 1;
            }

            public void onNothingSelected(AdapterView<?> arg0) {

            }
        });
    }

    /**
     * initcurState
     */
    private void initcurState() {
        appliancesInfo = (AppliancesInfo) getIntent().getSerializableExtra("hdl");

//        String titleStr = "";
//        try {
//            titleStr = appliancesInfo.getRemarks();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        if (titleStr != null) {
//            topBarTitle.setText(titleStr);
//        }

        mSecurityStateBean = new SecurityStateBean();
    }


    /**
     * 布防设置回调Event
     *
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onSecurityArmingFeedBackEventMain(SecurityArmingFeedBackEvent event) {
        if (event.getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                && event.getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()
        ) {
            //先判断是否超时
            if (!event.isSuccess()) {
                tv_mesSetText("布防设置超时,请重新再试");
                return;
            }

            int armingStateGet = event.getArmingState();
            if (armingStateGet >= 1 && armingStateGet <= 6) {
                armingState = armingStateGet;
                spinner_arming.setSelection(armingState - 1, true);
                tv_mesSetText("布防成功,当前状态:" + armingTypeItems[armingState - 1]);
            } else if (armingState == SecurityParser.ARMING_FAIL) {
                tv_mesSetText("布防失败");
            } else {
                tv_mesSetText("未知布防状态");
            }
        }
    }

    /**
     * 查询布防状态 回调Event
     *
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onDeviceStateEventMain(DeviceStateEvent event) {

        if (event.getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
        ) {
            //这个返回的信息是当前状态的
            switch (event.getAppliancesInfo().getDeviceType()) {
                case HDLApConfig.TYPE_SECURITY_MODULE:
                    if (appliancesInfo.getChannelNum() == event.getAppliancesInfo().getChannelNum()) {
                        if (!event.isSuccess()) {
                            tv_mesSetText("获取布防状态失败,请重新再试");
                            return;
                        }

                        SecurityArmingStateBackInfo mSecurityArmingStateBackInfo = new SecurityArmingStateBackInfo(event.getAppliancesInfo().getArrCurState());
                        if (mSecurityArmingStateBackInfo == null) {
                            tv_mesSetText("获取布防状态失败,请重新再试");
                            return;
                        }

                        int armingStateBack = mSecurityArmingStateBackInfo.getArmingState();
                        if (armingStateBack == 0) {   //读取返回0为撤防
                            armingState = SecurityParser.ARMING_DISARMING;
                            spinner_arming.setSelection(armingState - 1, true);
                            tv_mesSetText("获取成功,当前状态:" + armingTypeItems[armingState - 1]);
                        } else if (armingStateBack >= 1 && armingStateBack <= 6) {
                            armingState = armingStateBack;//更新状态值
                            spinner_arming.setSelection(armingState - 1, true);
                            tv_mesSetText("获取成功,当前状态:" + armingTypeItems[armingState - 1]);
                        } else {
                            tv_mesSetText("获取成功,未知布防状态");
                        }

                    }
                    break;
            }
        }
    }


    /**
     * 报警回调Event
     *
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onSecurityAlarmFeedBackEventMain(SecurityAlarmFeedBackEvent event) {
        if (event.getSecurityBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getSecurityBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                && event.getSecurityBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()
        ) {
//            //先判断是否超时
//            if (!event.isSuccess()) {
//                tv_mesSetText("报警设置超时,请重新再试");
//                return;
//            }

            mSecurityStateBean = event.getSecurityBackInfo().getSecurityStateBean();
            if (mSecurityStateBean != null) {
                setAllAlarmStateTextView();
            }

        }
    }


    /**
     * TextView 显示信息并且showToast提示
     *
     * @param mes
     */
    private void tv_mesSetText(String mes) {
        tv_mes.setText(mes);
        showToast(mes);
    }

    private String getAlarmStateString(int state, String alarmName) {
        if (state == 0) {
            return "正常";
        } else {
            HDLLog.I(alarmName + ", 报警状态!");
            return "警告,报警状态!";
        }
    }


    private void setAllAlarmStateTextView() {
//        tv_alarmFire.setText(getAlarmStateString(mSecurityStateBean.getAlarmFire(), "火警"));
//        tv_alarmGas.setText(getAlarmStateString(mSecurityStateBean.getAlarmGas(), "煤气报警"));
//        tv_alarmSudden.setText(getAlarmStateString(mSecurityStateBean.getAlarmSudden(), "突发报警"));
//        tv_alarmEmergency.setText(getAlarmStateString(mSecurityStateBean.getAlarmEmergency(), "紧急报警"));
//        tv_alarmCurrent.setText(getAlarmStateString(mSecurityStateBean.getAlarmCurrent(), "电流报警"));
//        tv_alarmSilent.setText(getAlarmStateString(mSecurityStateBean.getAlarmSilent(), "无声报警"));
//        tv_alarmPower.setText(getAlarmStateString(mSecurityStateBean.getAlarmPower(), "功率报警"));
//        tv_alarmTemperature.setText(getAlarmStateString(mSecurityStateBean.getAlarmTemperature(), "温度报警"));


    }
}