package edu.whs.spin2018.baoapp.views.menues;

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.support.annotation.RequiresApi;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;

import edu.whs.spin2018.baoapp.R;
import edu.whs.spin2018.baoapp.service.BaoService;
import edu.whs.spin2018.baoapp.service.Konstanten;
import edu.whs.spin2018.baoapp.utilities.SharedPrefUtils;
import edu.whs.spin2018.baoapp.utilities.ViewUtils;
import edu.whs.spin2018.baoapp.views.OnlineActivity;

/**
 * Die HauptmenueActivity ist das Hauptmenü der App und ermöglicht das Navigieren durch die App.
 */
public class HauptmenueActivity extends OnlineActivity implements NamensabfrageDialog.OnNameGesetztListener {

    public static final String TAG_NAMENSABFRAGE_DIALOG = "NamensabfrageDialog";

    /**
     * Viewvariablen
     */

    private TextView name;
    private TextView namenstrenner;
    private TextView uuidText;

    private BaoService baoService;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(edu.whs.spin2018.baoapp.R.layout.activity_hauptmenue);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        Button einzelspieler = findViewById(edu.whs.spin2018.baoapp.R.id.hauptmenue_btn_einzelspieler);
        Button mehrspieler = findViewById(edu.whs.spin2018.baoapp.R.id.hauptmenue_btn_mehrspieler);
        Button einstellungen = findViewById(edu.whs.spin2018.baoapp.R.id.hauptmenue_btn_einstellungen);
        Button regeln = findViewById(edu.whs.spin2018.baoapp.R.id.hauptmenue_btn_regeln);

        name = findViewById(edu.whs.spin2018.baoapp.R.id.hauptmenue_tv_benutzername);
        namenstrenner = findViewById(edu.whs.spin2018.baoapp.R.id.hauptmenue_tv_namenstrenner);
        uuidText = findViewById(edu.whs.spin2018.baoapp.R.id.hauptmenue_tv_uuid);

        ViewUtils.setzeSchatten(einzelspieler);
        ViewUtils.setzeSchatten(mehrspieler);
        ViewUtils.setzeSchatten(einstellungen);
        ViewUtils.setzeSchatten(regeln);

        ViewUtils.setzeSchatten(name);
        ViewUtils.setzeSchatten(namenstrenner);
        ViewUtils.setzeSchatten(uuidText);


        //Öffnet das Untermenü Einzelspieler
        einzelspieler.setOnClickListener(view -> startActivity(
                new Intent(HauptmenueActivity.this, EinzelspielerActivity.class)));

        //Öffnet das Untermenü Mehrspieler
        mehrspieler.setOnClickListener(view -> startActivity(
                new Intent(HauptmenueActivity.this, MehrspielerActivity.class)));

        //Öffnet die Einstellungen
        einstellungen.setOnClickListener(view -> startActivityForResult(
                new Intent(HauptmenueActivity.this, EinstellungenActivity.class), 0));

        //Öffnet die Regeln
        regeln.setOnClickListener(view -> startActivity(
                new Intent(HauptmenueActivity.this, RegelnActivity.class)));

        if (pruefeObNameVorhanden()) {
            initialisiereName();
            starteBaoService();
        }
//        Log.d("textsizetv", "" + name.setTextSize();
    }

    void initialisiereName() {
        name.setVisibility(View.VISIBLE);
        namenstrenner.setVisibility(View.VISIBLE);
        uuidText.setVisibility(View.VISIBLE);
        name.setText(SharedPrefUtils.gibBenutzername(this));
        uuidText.setText(SharedPrefUtils.gibUUID(this));
    }


    @Override
    public void onResume() {
        super.onResume();
        name.setText(SharedPrefUtils.gibBenutzername(this));
    }


    /**
     * Prüft ob ein Name in den SharedPreferences vorhanden ist - wenn nicht ruft die Methode
     * showPopUp() auf. Ist ein Name vorhanden loggt der Client sich beim Server ein.
     */
    private boolean pruefeObNameVorhanden() {
        String username = SharedPrefUtils.gibBenutzername(this);
        if (username == null) {
            name.setVisibility(View.INVISIBLE);
            namenstrenner.setVisibility(View.INVISIBLE);
            uuidText.setVisibility(View.INVISIBLE);
            zeigePopup();
            return false;
        }

        return true;
    }


    /**
     * Ruft ein Popup auf, indem man seinen Namen eintragen kann. Dieser wird dann in den
     * SharedPreferences gespeichert
     */
    private void zeigePopup() {
        NamensabfrageDialog dialog = NamensabfrageDialog.newInstance();
        dialog.show(getSupportFragmentManager(), TAG_NAMENSABFRAGE_DIALOG);

        // UUID erstellen
        SharedPrefUtils.setzteUUID(this);
    }

    @Override
    public void onNameGesetzt(String benutzername) {
        name.setText(benutzername);
        if (baoService == null) {
            starteBaoService();
            initialisiereName();
        }
    }

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        baoService = ((BaoService.LocalBinder) service).getService();
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {

    }

    private void starteBaoService() {
        Intent startBaoService = new Intent(HauptmenueActivity.this, BaoService.class);
        startBaoService.putExtra(Konstanten.EXTRA_BENUTZERNAME, SharedPrefUtils.gibBenutzername(this));
        startBaoService.putExtra(Konstanten.EXTRA_UUID, SharedPrefUtils.gibUUID(this));
        startService(startBaoService);
    }
}
