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.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;

public class activityLicht extends AppCompatActivity implements View.OnClickListener {

    public static boolean pausedLicht = true;
    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);

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

        pausedLicht = false;

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

        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", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"WMTom\"" + ",\"Checkbox\":\"true\"}");
            } else {
                // msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMTom", false));
                MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Tom", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"WMTom\"" + ",\"Checkbox\":\"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", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"WMFlo\"" + ",\"Checkbox\":\"true\"}");
            } else {
                // msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMFlo", false));
                MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Flo", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"WMFlo\"" + ",\"Checkbox\":\"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", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"WMStefan\"" + ",\"Checkbox\":\"true\"}");
            } else {
                // msg = gson.toJson(new Checkboxen(MainActivity.ID, "WMStefan", false));
                MqttClient.publish("cmnd/Haussteuerung/Waschmaschine/Stefan", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"WMStefan\"" + ",\"Checkbox\":\"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", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Glocke\"" + ",\"Checkbox\":\"true\"}");
            } else {
                // msg = gson.toJson(new Checkboxen(MainActivity.ID, "Glocke", false));
                MqttClient.publish("cmnd/Haussteuerung/Glocke", "{\"DeviceID\":\"" + MainActivity.ID + "\",\"Name\":\"Glocke\"" + ",\"Checkbox\":\"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) {
        switch (v.getId()) {
            case R.id.buttonLicht1:
                msg = gson.toJson(new Licht(MainActivity.ID, "Licht Tom Zimmer", "Lamp01"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht2:
                msg = gson.toJson(new Licht(MainActivity.ID, "Licht Wohnzimmer", "Lamp02"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht3:
                msg = gson.toJson(new Licht(MainActivity.ID, "Stehlampe WZ", "Lamp03"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht4:
                msg = gson.toJson(new Licht(MainActivity.ID, "Licht Esszimmer", "Lamp04"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht5:
                msg = gson.toJson(new Licht(MainActivity.ID, "Licht Küche", "Lamp05"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht6:
                msg = gson.toJson(new Licht(MainActivity.ID, "Licht Gang", "Lamp06"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht7:
                msg = gson.toJson(new Licht(MainActivity.ID, "Licht Stiegenhaus", "Lamp07"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht8:
                msg = gson.toJson(new Licht(MainActivity.ID, "Licht Obergeschoss", "Lamp08"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht9:
                msg = gson.toJson(new Licht(MainActivity.ID, "Licht Schlafzimmer", "Lamp09"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht10:
                msg = gson.toJson(new Licht(MainActivity.ID, "Gartentor", "Lamp10"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht11:
                msg = gson.toJson(new Licht(MainActivity.ID, "Eingangstuer", "Lamp11"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht12:
                msg = gson.toJson(new Licht(MainActivity.ID, "Garagentor", "Lamp12"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht13:
                msg = gson.toJson(new Licht(MainActivity.ID, "Nachtkastl Tom", "Lamp13"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht14:
                msg = gson.toJson(new Licht(MainActivity.ID, "Licht Obergeschoss", "Lamp14"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht15:
                msg = gson.toJson(new Licht(MainActivity.ID, "Licht Obergeschoss", "Lamp15"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht16:
                msg = gson.toJson(new Licht(MainActivity.ID, "vuDuoSZ", "Lamp16"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht17:
                msg = gson.toJson(new Licht(MainActivity.ID, "Zirkulationspumpe", "Lamp17"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht18:
                msg = gson.toJson(new Licht(MainActivity.ID, "PCFlo", "Lamp18"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
            case R.id.buttonLicht19:
                Intent iSky = new Intent(activityLicht.this, activitySky.class);
                startActivity(iSky);
                break;
            case R.id.buttonLicht20:
                msg = gson.toJson(new Licht(MainActivity.ID, "Licht Flo", "Lamp20"));
                MqttClient.publish("cmnd/Haussteuerung/Licht", msg);
                break;
        }
    }


    @Override
    protected void onPause() {
        super.onPause();
        pausedLicht = true;
        Log.d("LichtActivityPause", "true");
    }

    @Override
    protected void onResume() {
        super.onResume();
        pausedLicht = false;
        Log.d("LichtActivityPause", "false");

    }

    @Override
    protected void onStop() {
        super.onStop();
        pausedLicht = true;
        Log.d("LichtActivityPause", "true");
    }
}

class Checkboxen {
    @SerializedName("DeviceID")
    private final String deviceId;
    @SerializedName("Name")
    private final String name;
    @SerializedName("Checkbox")
    private final boolean checkbox;

    public Checkboxen(String deviceId, String name, boolean checkbox) {
        this.deviceId = deviceId;
        this.name = name;
        this.checkbox = checkbox;
    }
}