package com.borjabolufer.elevate.ui.fragments;

import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

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

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

  
public class LoginFragment extends Fragment {

    private static final String TAG = "LoginFragment";
    private static final String ARG_USUARIO = "usuario";
    private static final String ARG_NOMBRE_USUARIO = "nombre_usuario";
    private static final String ARG_CONTRASENA_USUARIO = "contrasena_usuario";
    private static final String ARG_ES_REGENERACION = "es_regeneracion";

    private Usuario usuario;
    private String nombreUsuario;
    private String contrasenaUsuario;
    private boolean esRegeneracion = false;

    private TextView placeholderText;
    private View loadingContainer;

    public static LoginFragment newInstance(Usuario usuario, String nombreUsuario, String contrasenaUsuario) {
        LoginFragment fragment = new LoginFragment();
        Bundle args = new Bundle();
        args.putSerializable(ARG_USUARIO, usuario);
        args.putString(ARG_NOMBRE_USUARIO, nombreUsuario);
        args.putString(ARG_CONTRASENA_USUARIO, contrasenaUsuario);
        args.putBoolean(ARG_ES_REGENERACION, false);
        fragment.setArguments(args);
        return fragment;
    }

    public static LoginFragment newInstanceRegeneration(Usuario usuario, String nombreUsuario) {
        LoginFragment fragment = new LoginFragment();
        Bundle args = new Bundle();
        args.putSerializable(ARG_USUARIO, usuario);
        args.putString(ARG_NOMBRE_USUARIO, nombreUsuario);
        args.putString(ARG_CONTRASENA_USUARIO, "regeneration");
        args.putBoolean(ARG_ES_REGENERACION, true);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            usuario = (Usuario) getArguments().getSerializable(ARG_USUARIO);
            nombreUsuario = getArguments().getString(ARG_NOMBRE_USUARIO);
            contrasenaUsuario = getArguments().getString(ARG_CONTRASENA_USUARIO);
            esRegeneracion = getArguments().getBoolean(ARG_ES_REGENERACION, false);
        }

        Log.d(TAG, "LoginFragment creado - Es regeneración: " + esRegeneracion);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_loading, container, false);
    }

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

          
        loadingContainer = view.findViewById(R.id.loading_container);

          
        cargarLoadingPlanFragment();
    }

    private void cargarLoadingPlanFragment() {
        if (usuario == null || nombreUsuario == null) {
            Log.e(TAG, "Datos de usuario incompletos");
            mostrarError("Datos de usuario incompletos");
            return;
        }

        try {
              
            if (placeholderText != null) {
                placeholderText.setVisibility(View.GONE);
            }

              
            LoadingPlanFragment loadingFragment;
            if (esRegeneracion) {
                loadingFragment = LoadingPlanFragment.newInstanceRegeneration(usuario, nombreUsuario);
            } else {
                loadingFragment = LoadingPlanFragment.newInstance(usuario, nombreUsuario, contrasenaUsuario);
            }

              
            FragmentManager childFragmentManager = getChildFragmentManager();
            childFragmentManager.beginTransaction()
                    .replace(R.id.loading_container, loadingFragment, "loading_plan_child")
                    .commitAllowingStateLoss();

            Log.d(TAG, "LoadingPlanFragment cargado en contenedor específico");

        } catch (Exception e) {
            Log.e(TAG, "Error cargando LoadingPlanFragment", e);
            mostrarError("Error al iniciar la generación del plan");
        }
    }

    private void mostrarError(String mensaje) {
        if (placeholderText != null) {
            placeholderText.setText("❌ " + mensaje);
            placeholderText.setVisibility(View.VISIBLE);
        }

          
        if (getView() != null) {
            getView().postDelayed(() -> {
                if (isAdded() && getActivity() != null) {
                    getActivity().onBackPressed();
                }
            }, 3000);
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

          
        try {
            FragmentManager childFragmentManager = getChildFragmentManager();
            if (childFragmentManager.getBackStackEntryCount() > 0) {
                childFragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
            }
        } catch (Exception e) {
            Log.w(TAG, "Error limpiando child fragments: " + e.getMessage());
        }
    }

      
    public Usuario getUsuario() {
        return usuario;
    }

    public String getNombreUsuario() {
        return nombreUsuario;
    }

    public boolean isEsRegeneracion() {
        return esRegeneracion;
    }
}