package com.haussteuerung;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.lifecycle.ProcessLifecycleOwner;

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import com.haussteuerung.helper.Checkboxen;
import com.haussteuerung.helper.Licht;

import java.util.HashMap;
import java.util.Map;

public class activityLicht extends AppCompatActivity implements View.OnClickListener {
    private final Map<Integer, Licht> lichtMap = new HashMap<>();
    private CheckBox checkWM1, checkWM2, checkWM3, checkWM4;
    public static String nameTom = "";
    public static String nameFlo = "";
    public static String nameStefan = "";
    public static String nameGlocke = "";
    public static boolean checkedTom;
    public static boolean checkedFlo;
    public static boolean checkedStefan;
    public static boolean checkedGlocke;
    Gson gson = new Gson();
    String msg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleTracker());

        androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
        assert actionBar != null;
        actionBar.setBackgroundDrawable(AppCompatResources.getDrawable(getApplicationContext(), R.color.black));

        setContentView(R.layout.activity_licht);
        setTitle("Haussteuerung - Licht");

        initLichtMap(MainActivity.ID);

        Button buttonLicht1 = findViewById(R.id.buttonLicht1);
        Button buttonLicht2 = findViewById(R.id.buttonLicht2);
        Button buttonLicht3 = findViewById(R.id.buttonLicht3);
        Button buttonLicht4 = findViewById(R.id.buttonLicht4);
        Button buttonLicht5 = findViewById(R.id.buttonLicht5);
        Button buttonLicht6 = findViewById(R.id.buttonLicht6);
        Button buttonLicht7 = findViewById(R.id.buttonLicht7);
        Button buttonLicht8 = findViewById(R.id.buttonLicht8);
        Button buttonLicht9 = findViewById(R.id.buttonLicht9);
        Button buttonLicht10 = findViewById(R.id.buttonLicht10);
        Button buttonLicht11 = findViewById(R.id.buttonLicht11);
        Button buttonLicht12 = findViewById(R.id.buttonLicht12);
        Button buttonLicht13 = findViewById(R.id.buttonLicht13);
        Button buttonLicht14 = findViewById(R.id.buttonLicht14);
        Button buttonLicht15 = findViewById(R.id.buttonLicht15);
        Button buttonLicht16 = findViewById(R.id.buttonLicht16);
        Button buttonLicht17 = findViewById(R.id.buttonLicht17);
        Button buttonLicht18 = findViewById(R.id.buttonLicht18);
        Button buttonLicht19 = findViewById(R.id.buttonLicht19);
        Button buttonLicht20 = findViewById(R.id.buttonLicht20);

        checkWM1 = findViewById(R.id.checkWM1);
        checkWM2 = findViewById(R.id.checkWM2);
        checkWM3 = findViewById(R.id.checkWM3);
        checkWM4 = findViewById(R.id.checkWM4);
        checkWM1.setChecked(checkedTom);
        checkWM1.setOnClickListener(view -> {
            if (checkWM1.isChecked()) {
                msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMTom", true));
                MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Tom", msg);
            } else {
                msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMTom", false));
                MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Tom", msg);
            }
        });
        checkWM2.setChecked(checkedFlo);
        checkWM2.setOnClickListener(view -> {
            if (checkWM2.isChecked()) {
                msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMFlo", true));
                MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Flo", msg);
            } else {
                msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMFlo", false));
                MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Flo", msg);
            }
        });
        checkWM3.setChecked(checkedStefan);
        checkWM3.setOnClickListener(view -> {
            if (checkWM3.isChecked()) {
                msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMStefan", true));
                MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Stefan", msg);
            } else {
                msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMStefan", false));
                MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Stefan", msg);
            }
        });
        checkWM4.setChecked(checkedGlocke);
        checkWM4.setOnClickListener(view -> {
            if (checkWM4.isChecked()) {
                msg = gson.toJson(new Checkboxen(MainActivity.ID, "Glocke", true));
                MqttClient.publish("cmnd/Haussteuerung/Glocke", msg);
            } else {
                msg = gson.toJson(new Checkboxen(MainActivity.ID, "Glocke", false));
                MqttClient.publish("cmnd/Haussteuerung/Glocke", msg);
            }
        });

        buttonLicht1.setOnClickListener(this);
        buttonLicht2.setOnClickListener(this);
        buttonLicht3.setOnClickListener(this);
        buttonLicht4.setOnClickListener(this);
        buttonLicht5.setOnClickListener(this);
        buttonLicht6.setOnClickListener(this);
        buttonLicht7.setOnClickListener(this);
        buttonLicht8.setOnClickListener(this);
        buttonLicht9.setOnClickListener(this);
        buttonLicht10.setOnClickListener(this);
        buttonLicht11.setOnClickListener(this);
        buttonLicht12.setOnClickListener(this);
        buttonLicht13.setOnClickListener(this);
        buttonLicht14.setOnClickListener(this);
        buttonLicht15.setOnClickListener(this);
        buttonLicht16.setOnClickListener(this);
        buttonLicht17.setOnClickListener(this);
        buttonLicht18.setOnClickListener(this);
        buttonLicht19.setOnClickListener(this);
        buttonLicht20.setOnClickListener(this);
    }

    @SuppressLint("NonConstantResourceId")
    @Override
    public void onClick(View v) {
        int id = v.getId();
        String msg;

        Licht licht = lichtMap.get(id);
        if (licht != null) {
            msg = gson.toJson(licht);
            MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
        } else {
            Log.w("LichtControl", "Unknown button: " + id);
        }

        if (id == R.id.buttonLicht19) {
            Intent iSky = new Intent(activityLicht.this, activitySky.class);
            startActivity(iSky);
        }
    }

    private void initLichtMap(String androidId) {
        lichtMap.put(R.id.buttonLicht1, new Licht(androidId, "Licht Tom Zimmer", "Lamp01"));
        lichtMap.put(R.id.buttonLicht2, new Licht(androidId, "Licht Wohnzimmer", "Lamp02"));
        lichtMap.put(R.id.buttonLicht3, new Licht(androidId, "Stehlampe WZ", "Lamp03"));
        lichtMap.put(R.id.buttonLicht4, new Licht(androidId, "Licht Esszimmer", "Lamp04"));

        lichtMap.put(R.id.buttonLicht5, new Licht(androidId, "Licht Küche", "Lamp05"));
        lichtMap.put(R.id.buttonLicht6, new Licht(androidId, "Licht Gang", "Lamp06"));
        lichtMap.put(R.id.buttonLicht7, new Licht(androidId, "Licht Stiegenhaus", "Lamp07"));
        lichtMap.put(R.id.buttonLicht8, new Licht(androidId, "Licht Obergeschoss", "Lamp08"));

        lichtMap.put(R.id.buttonLicht9, new Licht(androidId, "Licht Schlafzimmer", "Lamp09"));
        lichtMap.put(R.id.buttonLicht10, new Licht(androidId, "Gartentor", "Lamp10"));
        lichtMap.put(R.id.buttonLicht11, new Licht(androidId, "Eingangstuer", "Lamp11"));
        lichtMap.put(R.id.buttonLicht12, new Licht(androidId, "Garagentor", "Lamp12"));

        lichtMap.put(R.id.buttonLicht13, new Licht(androidId, "Nachtkastl Tom", "Lamp13"));
        lichtMap.put(R.id.buttonLicht14, new Licht(androidId, "vuDuoWZ", "Lamp14"));
        lichtMap.put(R.id.buttonLicht15, new Licht(androidId, "Glocke", "Lamp15"));
        lichtMap.put(R.id.buttonLicht16, new Licht(androidId, "vuDuoSZ", "Lamp16"));

        lichtMap.put(R.id.buttonLicht17, new Licht(androidId, "Zirkulationspumpe", "Lamp17"));
        lichtMap.put(R.id.buttonLicht18, new Licht(androidId, "PC Flo", "Lamp18"));
        lichtMap.put(R.id.buttonLicht20, new Licht(androidId, "Nachtkastl Flo", "Lamp20"));
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();

    }

    @Override
    protected void onStop() {
        super.onStop();
    }
}