package com.hdl.sdk.ttl_sdk.activity;


import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.hdl.sdk.ttl.HDLAppliances.Config.HDLApConfig;
import com.hdl.sdk.ttl.HDLAppliances.HDLSensor.DryContactSensorBackEvent;
import com.hdl.sdk.ttl.HDLAppliances.HDLSensor.SensorStateBackInfo;
import com.hdl.sdk.ttl.HDLDeviceManger.Bean.AppliancesInfo;
import com.hdl.sdk.ttl.HDLDeviceManger.Core.HDLCommand;
import com.hdl.sdk.ttl_sdk.R;
import com.hdl.sdk.ttl_sdk.base.BaseActivity;
import com.hdl.sdk.ttl_sdk.utlis.HDLLog;
import com.hdl.sdk.ttl_sdk.utlis.HDLUtlis;

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

public class SensorActivity extends BaseActivity {
    /**
     * Topbar
     */
    private RelativeLayout topBarBack;
    private TextView topBarTitle;
    private TextView sensorText;
    private TextView sensorStatusText;
    private AppliancesInfo appliancesInfo;
    private String showMessage;


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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sensor);
        initToolbar();
        initcurState();
        initView();
        displayStateView();

        Log.d("panlili", "SensorActivity.java:appliancesInfo-----> " + appliancesInfo.toString());
        //安防传感器无状态获取,只能触发事件上报
        //环境传感器获取状态
        HDLCommand.getSensorStateFromNetwork(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();
            }
        });
    }

    private void initcurState() {
        appliancesInfo = (AppliancesInfo) getIntent().getSerializableExtra("hdl");
        String titleStr = appliancesInfo.getRemarks();
        if (TextUtils.isEmpty(titleStr) || titleStr.equals(HDLUtlis.REMAEK_NULL)) {
            if (TextUtils.isEmpty(appliancesInfo.getDeviceName())) {
                titleStr = "备注为空";
            } else {
                titleStr = appliancesInfo.getDeviceName();
            }
        }
        topBarTitle.setText(titleStr + appliancesInfo.getDeviceType());

    }

    private void initView() {
        sensorText = findViewById(R.id.sensorText);
        sensorStatusText = findViewById(R.id.sensorStatusText);
    }

    private void displayStateView() {

        switch (appliancesInfo.getDeviceType()) {
            case HDLApConfig.TYPE_SENSOR_MOVEMENT_DETECTOR: //红外感应传感器
            case HDLApConfig.TYPE_SENSOR_LPG:         //煤气传感器 液化石油气
            case HDLApConfig.TYPE_SENSOR_CO_H2:         //煤气传感器 人工煤气(CO,H2)
            case HDLApConfig.TYPE_SENSOR_CH4:         //煤气传感器 天然气(CH4)
            case HDLApConfig.TYPE_SENSOR_SMOG:          //烟雾传感器
            case HDLApConfig.TYPE_SENSOR_FLOODING:       //水浸传感器
            case HDLApConfig.TYPE_SENSOR_DOOR_MAGNET:   //门磁传感器
            case HDLApConfig.TYPE_SENSOR_EMERGENCY_BUTTON://紧急按钮
            case HDLApConfig.TYPE_SENSOR_TEMP://温度
            case HDLApConfig.TYPE_SENSOR_HUMIDITY://湿度
            case HDLApConfig.TYPE_SENSOR_VOC://VOC
            case HDLApConfig.TYPE_SENSOR_PM_2_POINT_5://PM2.5
            case HDLApConfig.TYPE_SENSOR_C02://C02
            case HDLApConfig.TYPE_SENSOR_PM_10://PM10
                break;
            default:
                finish();//设备类型不对结束页面
                break;
        }
        /**根据需求是否发送一次获取刷新状态请求*/
    }


    /**
     * 传感器状态回调 Event
     * 干节点状态主动广播--->15D0
     *
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onDryContactSensorBackEventMain(DryContactSensorBackEvent event) {
        if (event.getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                && event.getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()
        ) {

            if (!event.isSuccess()) {
                showToast("传感器状态上报失败,请重新再试");
                return;
            }
            String mData = "";
            if (appliancesInfo.getDeviceType() == HDLApConfig.TYPE_SENSOR_MOVEMENT_DETECTOR) {//红外感应传感器
                mData = event.getState() == 0 ? "无人" : "有人";
            } else if (appliancesInfo.getDeviceType() == HDLApConfig.TYPE_SENSOR_FLOODING) {//水浸传感器
                mData = event.getState() == 0 ? "正常" : "漏水";
            } else if (appliancesInfo.getDeviceType() == HDLApConfig.TYPE_SENSOR_DOOR_MAGNET) {//门磁传感器
                mData = event.getState() == 0 ? "闭合" : "打开";
            } else {
                mData = event.getState() == 0 ? "正常" : "报警";
            }

            sensorText.setVisibility(View.VISIBLE);
            sensorStatusText.setVisibility(View.GONE);
            sensorText.setText("传感器状态:" + mData);
            HDLLog.Log("传感器状态:" + mData);
        }
    }


    /**
     * 传感器状态回调 Event
     *
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onSensorStateBackInfoMain(SensorStateBackInfo event) {
        if (event.getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                && event.getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()
        ) {
            showMessage = "";
            sensorText.setVisibility(View.GONE);
            sensorStatusText.setVisibility(View.VISIBLE);
            //这个返回的信息是当前状态的
            switch (event.getAppliancesInfo().getDeviceType()) {
                case HDLApConfig.TYPE_SENSOR_TEMP:
                    //传感器 温度
                    if (!event.isSuccess()) {
                        showToast("获取传感器---温度状态失败,请重新再试");
                        return;
                    }
                    float tempValue = (float) event.getAppliancesInfo().getCurState();
                    String tempValueUnit = ((SensorStateBackInfo) event).getUnite();
                    showMessage = tempValue + tempValueUnit;
                    sensorStatusText.setText("传感器---温度:" + showMessage);
                    showToast("传感器---温度:" + tempValue + tempValueUnit);
                    HDLLog.Log("传感器---温度:" + tempValue + tempValueUnit);
                    break;
                case HDLApConfig.TYPE_SENSOR_HUMIDITY:
                    //传感器 湿度
                    if (!event.isSuccess()) {
                        showToast("获取传感器---湿度状态失败,请重新再试");
                        return;
                    }
                    float humidityValue = (float) event.getAppliancesInfo().getCurState();
                    String humidityValueUnit = ((SensorStateBackInfo) event).getUnite();
                    showMessage = humidityValue + humidityValueUnit;
                    sensorStatusText.setText("传感器---湿度:" + showMessage);
                    showToast("传感器---湿度:" + humidityValue + humidityValueUnit);
                    HDLLog.Log("传感器---湿度:" + humidityValue + humidityValueUnit);
                    break;
                case HDLApConfig.TYPE_SENSOR_VOC:
                    //传感器 当前空气质量等级
                    if (!event.isSuccess()) {
                        showToast("获取传感器---当前空气质量等级状态失败,请重新再试");
                        return;
                    }
                    float vocValue = (float) event.getAppliancesInfo().getCurState();
                    String vocValueUnit = ((SensorStateBackInfo) event).getUnite();
                    showMessage = vocValue + vocValueUnit;
                    sensorStatusText.setText("传感器---当前空气质量等级:" + showMessage);
                    showToast("传感器---当前空气质量等级:" + vocValue + vocValueUnit);
                    HDLLog.Log("传感器---当前空气质量等级:" + vocValue + vocValueUnit);
                    break;
                case HDLApConfig.TYPE_SENSOR_PM_2_POINT_5:
                    //传感器 pm2.5
                    if (!event.isSuccess()) {
                        showToast("获取传感器---pm2.5状态失败,请重新再试");
                        return;
                    }
                    float pm2_5Value = (float) event.getAppliancesInfo().getCurState();
                    String pm2_5ValueUnit = ((SensorStateBackInfo) event).getUnite();
                    showMessage = pm2_5Value + pm2_5ValueUnit;
                    sensorStatusText.setText("传感器---pm2.5:" + showMessage);
                    showToast("传感器---pm2.5:" + pm2_5Value + pm2_5ValueUnit);
                    HDLLog.Log("传感器---pm2.5:" + pm2_5Value + pm2_5ValueUnit);
                    break;
                case HDLApConfig.TYPE_SENSOR_C02:
                    //传感器 二氧化碳
                    if (!event.isSuccess()) {
                        showToast("获取传感器---二氧化碳状态失败,请重新再试");
                        return;
                    }
                    float co2Value = (float) event.getAppliancesInfo().getCurState();
                    String co2ValueUnit = ((SensorStateBackInfo) event).getUnite();
                    showMessage = co2Value + co2ValueUnit;
                    sensorStatusText.setText("传感器---二氧化碳:" + showMessage);
                    showToast("传感器---二氧化碳:" + co2Value + co2ValueUnit);
                    HDLLog.Log("传感器---二氧化碳:" + co2Value + co2ValueUnit);
                    break;
                case HDLApConfig.TYPE_SENSOR_PM_10:
                    //传感器 pm10
                    if (appliancesInfo.getChannelNum() != event.getAppliancesInfo().getChannelNum() || !event.isSuccess()) {
                        showToast("获取传感器---pm10状态失败,请重新再试");
                        return;
                    }
                    float pm10Value = (float) event.getAppliancesInfo().getCurState();
                    String pm10ValueUnit = ((SensorStateBackInfo) event).getUnite();
                    showMessage = pm10Value + pm10ValueUnit;
                    sensorStatusText.setText("传感器---pm10:" + showMessage);
                    showToast("传感器---pm10:" + pm10Value + pm10ValueUnit);
                    HDLLog.Log("传感器---pm10:" + pm10Value + pm10ValueUnit);
                    break;
            }
        }
    }

}