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.Peso;

public class PesoFragment extends Fragment {

    public interface IOnPesoListener {
        void onPesoSelected(Peso peso);
    }

    private IOnPesoListener pesoListener;
    private EditText editPeso;
    private Button btnContinuar;

    public PesoFragment() {
        super(R.layout.fragment_peso);
    }

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

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

    private void initializeViews(View view) {
        editPeso = view.findViewById(R.id.editPeso);
        btnContinuar = view.findViewById(R.id.btnContinuarPeso);

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

    private void setupTextWatcher() {
        editPeso.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 {
                float peso = Float.parseFloat(input);

                  
                if (peso >= 30.0f && peso <= 300.0f) {
                    isValid = true;
                }
            } catch (NumberFormatException e) {
                  
                isValid = false;
            }
        }

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

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

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

            try {
                float pesoValor = Float.parseFloat(pesoTexto);

                  
                if (pesoValor < 30.0f || pesoValor > 300.0f) {
                    Toast.makeText(getContext(), "Por favor, ingresa un peso entre 30 y 300 kg",
                            Toast.LENGTH_SHORT).show();
                    return;
                }

                  
                Peso peso = new Peso(pesoValor);

                if (pesoListener != null) {
                    pesoListener.onPesoSelected(peso);
                } else {
                    Toast.makeText(getContext(), "Error: No se pudo procesar el peso",
                            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 IOnPesoListener) {
            pesoListener = (IOnPesoListener) context;
        } else {
            throw new ClassCastException(context.toString() + " must implement IOnPesoListener");
        }
    }

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