package com.borjabolufer.elevate.ui.fragments;

import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.borjabolufer.elevate.R;
import com.borjabolufer.elevate.model.Altura;

public class AlturaFragment extends Fragment {

    public interface IOnAlturaListener {
        void onAlturaSelected(Altura altura);
    }

    private IOnAlturaListener alturaListener;
    private EditText editAltura;
    private Button btnContinuar;

    public AlturaFragment() {
        super(R.layout.fragment_altura);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        initializeViews(view);
        setupTextWatcher();
        setupClickListener();
    }

    private void initializeViews(View view) {
        editAltura = view.findViewById(R.id.editAltura);
        btnContinuar = view.findViewById(R.id.btnContinuarAltura);

        btnContinuar.setEnabled(false);
        btnContinuar.setAlpha(0.5f);
    }

    private void setupTextWatcher() {
        editAltura.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                validateInput(s.toString().trim());
            }
        });
    }

    private void validateInput(String input) {
        boolean isValid = false;

        if (!input.isEmpty()) {
            try {
                int altura = Integer.parseInt(input);

                if (altura >= 100 && altura <= 250) {
                    isValid = true;
                }
            } catch (NumberFormatException e) {
                isValid = false;
            }
        }

        btnContinuar.setEnabled(isValid);
        btnContinuar.setAlpha(isValid ? 1.0f : 0.5f);
    }

    private void setupClickListener() {
        btnContinuar.setOnClickListener(v -> {
            String alturaTexto = editAltura.getText().toString().trim();

            if (alturaTexto.isEmpty()) {
                Toast.makeText(getContext(), "Por favor, ingresa tu altura", Toast.LENGTH_SHORT).show();
                return;
            }

            try {
                int alturaValor = Integer.parseInt(alturaTexto);

                if (alturaValor < 100 || alturaValor > 250) {
                    Toast.makeText(getContext(), "Por favor, ingresa una altura entre 100 y 250 cm",
                            Toast.LENGTH_SHORT).show();
                    return;
                }

                Altura altura = new Altura(alturaValor);

                if (alturaListener != null) {
                    alturaListener.onAlturaSelected(altura);
                } else {
                    Toast.makeText(getContext(), "Error: No se pudo procesar la altura",
                            Toast.LENGTH_SHORT).show();
                }

            } catch (NumberFormatException e) {
                Toast.makeText(getContext(), "Por favor, ingresa un número válido",
                        Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        if (context instanceof IOnAlturaListener) {
            alturaListener = (IOnAlturaListener) context;
        } else {
            throw new ClassCastException(context.toString() + " must implement IOnAlturaListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        alturaListener = null;
    }
}