package com.hdl.sdk.ttl_sdk.activity;


import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.hdl.sdk.ttl.HDLAppliances.Config.HDLApConfig;
import com.hdl.sdk.ttl.HDLDeviceManger.Bean.AppliancesInfo;
import com.hdl.sdk.ttl.HDLDeviceManger.Core.HDLCommand;
import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DeviceStateEvent;
import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.LightFeedBackEvent;
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;

/**
 * Created by JLChen on 2019/7/4
 * 调光模块,继电器模块控制页面
 */
public class CtrlLightActivity extends BaseActivity {
    /**
     * Topbar
     */
    private RelativeLayout topBarBack;
    private TextView topBarTitle;
    private Button lightBtn, brightnessBtn;
    private EditText brightnessEt;
    private TextView lightText;
    private AppliancesInfo appliancesInfo;
    private int lightState;

    /**
     * 复写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_light);
        initToolbar();
        initView();
        initOnClick();
        initcurState();
        displayStateView();

//        //从SDK本地获取
//        HDLCommand.getDeviceStateFromLocal(appliancesInfo);
        //从网络上查询刷新一次设备状态,待调试
        HDLCommand.getLightDeviceStateFromNetwork(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();
        topBarTitle.setText(titleStr);
    }

    private void initView() {
        lightBtn = findViewById(R.id.ctrlbtn);
        lightText = findViewById(R.id.lightText);
        brightnessBtn = findViewById(R.id.ctrl_brightness);
        brightnessEt = findViewById(R.id.et_brightness);

    }

    private void initOnClick() {

        lightBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                HDLCommand.lightCtrl(appliancesInfo, lightState);
                HDLLog.Log("lightBtn: 开关灯" + lightState);
            }
        });
        brightnessBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String brightnessStr = brightnessEt.getText().toString();
                if (TextUtils.isEmpty(brightnessStr)) {
                    showToast("设置的亮度不能为空");
                    return;
                }
                HDLCommand.lightCtrl(appliancesInfo, Integer.parseInt(brightnessStr));
                HDLLog.Log("brightnessBtn: 设置亮度" + brightnessStr);
            }
        });
    }

    private void displayStateView() {
        switch (appliancesInfo.getDeviceType()) {
            case HDLApConfig.TYPE_LIGHT_DIMMER:
            case HDLApConfig.TYPE_LIGHT_RELAY:
            case HDLApConfig.TYPE_LIGHT_MIX_DIMMER:
            case HDLApConfig.TYPE_LIGHT_MIX_RELAY:
                if (appliancesInfo.getCurState() != null) {
                    int curLightState = HDLUtlis.getIntegerByObject(appliancesInfo.getCurState());

                    lightText.setText("当前灯光亮度:" + curLightState);

                    if (curLightState == 0) {
                        lightState = 100;
                        lightBtn.setText("开灯");
                    } else {
                        lightState = 0;
                        lightBtn.setText("关灯");
                    }
                } else {
                    lightText.setText("未获取到灯光亮度");
                    lightBtn.setText("未获取到灯光亮度");
                }
                break;

            default:
                finish();//设备类型不对结束页面
                break;
        }
        /**根据需求是否发送一次获取刷新状态请求*/
    }

    /**
     * 灯光控制回调Event
     *
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onLightFeedBackInfoEventMain(LightFeedBackEvent event) {

        if (event.getLightCtrlBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                && event.getLightCtrlBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getLightCtrlBackInfo().getChannelNum() == appliancesInfo.getChannelNum()
                && event.getLightCtrlBackInfo().getPhysicsChannelNum() == appliancesInfo.getPhysicsChannelNum()

        ) {
            //        先判断是否超时
            if (!event.isSuccess()) {
                showToast("灯光控制超时,请重新再试");
                lightBtn.setText("灯光控制超时,请重新再试");
                return;
            }
            int brightness = event.getLightCtrlBackInfo().getBrightness();
            lightText.setText("当前亮度 = " + brightness);

            if (brightness == 0) {
                lightState = 100;
                lightBtn.setText("开灯");
            } else {
                lightState = 0;
                lightBtn.setText("关灯");
            }

        /*以下为灯光推送示例代码,可以识别哪个继电器,哪个调光灯,哪个回路,也可用作控制回馈。
        按需求调用*/
            String remarks = event.getLightCtrlBackInfo().getRemarks();//获取返回的灯光备注。如果每个灯光回路备注都唯一,可以直接通过备注判断
            String parentRemarks = event.getLightCtrlBackInfo().getParentRemarks();//获取继电器或调光灯备注。这里可以知道是哪个设备返回的
            int num = event.getLightCtrlBackInfo().getChannelNum();//获取回路号。这里可以获取到这个继电器或调光灯的回路号
            showToast(remarks + " 回路,回路号为:" + num + " 返回" + " 亮度为:" + brightness);
            HDLLog.Log("当前亮度 = " + brightness);
        }
    }

    /**
     * 获取单一设备状态回调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_LIGHT_DIMMER:
                case HDLApConfig.TYPE_LIGHT_RELAY:
                case HDLApConfig.TYPE_LIGHT_MIX_DIMMER:
                case HDLApConfig.TYPE_LIGHT_MIX_RELAY:
                    if (appliancesInfo.getChannelNum() == event.getAppliancesInfo().getChannelNum()) {
                        if (!event.isSuccess()) {
                            showToast("获取灯光状态失败,请重新再试");
                            return;
                        }
                        int brightness = HDLUtlis.getIntegerByObject(event.getAppliancesInfo().getCurState());
                        if (brightness == 0) {
                            lightState = 100;
                            lightBtn.setText("开灯");
                        } else {
                            lightState = 0;
                            lightBtn.setText("关灯");
                        }
                        lightText.setText("当前亮度 = " + brightness);
                        showToast("获取状态返回:亮度 = " + brightness);
                    }
                    break;
                default:
                    //不处理
                    break;
            }
        }
    }
}