package com.borjabolufer.elevate.utils;

import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

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

import com.borjabolufer.elevate.R;

public class PlanActualizadoDialog extends DialogFragment {

    private static final String ARG_TITULO = "titulo";
    private static final String ARG_MENSAJE = "mensaje";
    private static final String ARG_ES_REGENERACION = "es_regeneracion";

    private OnDialogCloseListener listener;

    public interface OnDialogCloseListener {
        void onDialogClosed();
    }

    public static PlanActualizadoDialog newInstance(boolean esRegeneracion) {
        PlanActualizadoDialog fragment = new PlanActualizadoDialog();
        Bundle args = new Bundle();

        if (esRegeneracion) {
            args.putString(ARG_TITULO, "¡Plan Actualizado!");
            args.putString(ARG_MENSAJE, "Tu plan personalizado ha sido actualizado con éxito. Los nuevos ejercicios y recetas ya están disponibles.");
        } else {
            args.putString(ARG_TITULO, "¡Plan Creado!");
            args.putString(ARG_MENSAJE, "Tu plan personalizado ha sido creado con éxito. ¡Ya puedes comenzar tu journey fitness!");
        }

        args.putBoolean(ARG_ES_REGENERACION, esRegeneracion);
        fragment.setArguments(args);
        return fragment;
    }

    public void setOnDialogCloseListener(OnDialogCloseListener listener) {
        this.listener = listener;
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);

          
        Window window = dialog.getWindow();
        if (window != null) {
            window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            window.requestFeature(Window.FEATURE_NO_TITLE);
        }

        return dialog;
    }

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

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

          
        Bundle args = getArguments();
        if (args == null) return;

        String titulo = args.getString(ARG_TITULO, "¡Plan Actualizado!");
        String mensaje = args.getString(ARG_MENSAJE, "Tu plan ha sido actualizado con éxito.");
        boolean esRegeneracion = args.getBoolean(ARG_ES_REGENERACION, true);

          
        ImageView iconoExito = view.findViewById(R.id.iconoExito);
        TextView tituloText = view.findViewById(R.id.tituloDialog);
        TextView mensajeText = view.findViewById(R.id.mensajeDialog);
        Button btnAceptar = view.findViewById(R.id.btnAceptar);

          
        tituloText.setText(titulo);
        mensajeText.setText(mensaje);

          
        if (esRegeneracion) {
            btnAceptar.setText("Continuar");
        }

          
        animarEntrada(view);

          
        btnAceptar.setOnClickListener(v -> cerrarDialog());


          
        view.setOnClickListener(v -> {
            if (v.getId() == R.id.backgroundDialog) {
                cerrarDialog();
            }
        });
    }

    private void animarEntrada(View view) {
        try {
              
            View contenedor = view.findViewById(R.id.contenedorDialog);
            Animation slideIn = AnimationUtils.loadAnimation(getContext(), R.anim.slide_in_bottom);
            contenedor.startAnimation(slideIn);

              
            ImageView icono = view.findViewById(R.id.iconoExito);
            Animation scaleIn = AnimationUtils.loadAnimation(getContext(), R.anim.scale_in);
            icono.postDelayed(() -> icono.startAnimation(scaleIn), 300);

        } catch (Exception e) {
              
        }
    }

    private void cerrarDialog() {
        try {
            if (listener != null) {
                listener.onDialogClosed();
            }
            dismiss();
        } catch (Exception e) {
              
            dismissAllowingStateLoss();
        }
    }

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

          
        Dialog dialog = getDialog();
        if (dialog != null && dialog.getWindow() != null) {
            int width = (int) (getResources().getDisplayMetrics().widthPixels * 0.9);
            dialog.getWindow().setLayout(width, ViewGroup.LayoutParams.WRAP_CONTENT);
        }
    }
}