package com.borjabolufer.elevate.ui.fragments;

import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
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.DiasEntrenamiento;

import java.util.Arrays;
import java.util.List;

public class DiasEntrenamientoFragment extends Fragment {

    public interface IOnDiasEntrenamientoListener {
        void onDiasEntrenamientoSelected(DiasEntrenamiento diasEntrenamiento);
    }

    private IOnDiasEntrenamientoListener diasEntrenamientoListener;
    private Spinner spinnerDias;
    private Button btnContinuar;
    private int diasSeleccionados = -1;   

    public DiasEntrenamientoFragment() {
        super(R.layout.fragment_dias_entrenamiento);
    }

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

        initializeViews(view);
        setupSpinner();
        setupClickListener();
    }

    private void initializeViews(View view) {
        spinnerDias = view.findViewById(R.id.spinnerDias);
        btnContinuar = view.findViewById(R.id.btnContinuarDias);   

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

    private void setupSpinner() {
        List<String> diasOpciones = Arrays.asList(
                "Selecciona días por semana",   
                "1 días por semana",
                "2 días por semana",
                "3 días por semana",
                "4 días por semana",
                "5 días por semana",
                "6 días por semana",
                "7 días por semana"
                );

        ArrayAdapter<String> adapter = new ArrayAdapter<>(
                requireContext(),
                android.R.layout.simple_spinner_item,
                diasOpciones
        );

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerDias.setAdapter(adapter);

          
        spinnerDias.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                if (position == 0) {
                      
                    diasSeleccionados = -1;
                    btnContinuar.setEnabled(false);
                    btnContinuar.setAlpha(0.5f);
                } else {
                      
                    diasSeleccionados = position;   
                    btnContinuar.setEnabled(true);
                    btnContinuar.setAlpha(1.0f);
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                diasSeleccionados = -1;
                btnContinuar.setEnabled(false);
                btnContinuar.setAlpha(0.5f);
            }
        });
    }

    private void setupClickListener() {
        btnContinuar.setOnClickListener(v -> {
            if (diasSeleccionados == -1) {
                Toast.makeText(getContext(), "Por favor, selecciona los días de entrenamiento",
                        Toast.LENGTH_SHORT).show();
                return;
            }

              
            if (diasSeleccionados < 3 || diasSeleccionados > 6) {
                Toast.makeText(getContext(), "Selecciona entre 3 y 6 días por semana",
                        Toast.LENGTH_SHORT).show();
                return;
            }

            if (diasEntrenamientoListener != null) {
                DiasEntrenamiento seleccionado = new DiasEntrenamiento(diasSeleccionados);
                diasEntrenamientoListener.onDiasEntrenamientoSelected(seleccionado);
            } else {
                Toast.makeText(getContext(), "Error: No se pudo procesar la selección",
                        Toast.LENGTH_SHORT).show();
            }
        });
    }

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

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