package com.example.tcg.adapters;

import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.tcg.Carta;
import com.example.tcg.R;

import java.util.ArrayList;
import java.util.function.Consumer;
// Adaptador responsável por exibir uma lista de cartas em um ListView ou GridView
public class CartaAdapter extends BaseAdapter {

    private Context context;                    //contexto da activity onde a carta é usado
    private ArrayList<Carta> cartas;            //listas de cartas a serem vendidas
    private Consumer<Carta> onVenderClick;      //função a ser chamada quando clickado para vender


    // Construtor do adaptador
    public CartaAdapter(Context context, ArrayList<Carta> cartas, Consumer<Carta> onVenderClick) {
        this.context = context;
        this.cartas = cartas;
        this.onVenderClick = onVenderClick;
    }

    @Override
    public int getCount() {
        return cartas.size();
    }

    @Override
    public Object getItem(int position) {
        return cartas.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Carta carta = cartas.get(position);

        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.item_carta, parent, false);
        }

        ImageView imagemCarta = convertView.findViewById(R.id.imagemCarta);
        TextView textoNome = convertView.findViewById(R.id.textoNomeCarta);
        TextView textoRaridade = convertView.findViewById(R.id.textoRaridade);
        Button botaoVender = convertView.findViewById(R.id.botaoVender);
        View cartaLayout = convertView.findViewById(R.id.cartaLayout);

        // Define nome e raridade
        textoNome.setText(carta.getNome());
        textoRaridade.setText(carta.getRaridade());

        // Define imagem
        int resId = context.getResources().getIdentifier(carta.getImagem(), "drawable", context.getPackageName());
        imagemCarta.setImageResource(resId);

        // Mostrar o valor no botão
        int valor = getValorCarta(carta.getRaridade());
        botaoVender.setText("Vender (" + valor + " ouro)");

        // Define a cor/borda conforme raridade
        switch (carta.getRaridade()) {
            case "Comum":
                textoRaridade.setTextColor(Color.parseColor("#607D8B")); // cinza azulado
                cartaLayout.setBackgroundResource(R.drawable.borda_comum);
                break;
            case "Incomum":
                textoRaridade.setTextColor(Color.parseColor("#4CAF50")); // verde elegante
                cartaLayout.setBackgroundResource(R.drawable.borda_incomum);
                break;
            case "Rara":
                textoRaridade.setTextColor(Color.parseColor("#7E57C2")); // roxo
                cartaLayout.setBackgroundResource(R.drawable.borda_rara);
                break;
            case "Épica":
                cartaLayout.setBackgroundResource(R.drawable.borda_epica);
                textoRaridade.setTextColor(0xFF6A1B9A); // roxo vibrante
                break;
            case "Lendária":
                cartaLayout.setBackgroundResource(R.drawable.borda_lendaria);
                textoRaridade.setTextColor(0xFFFFD600); // dourado
                break;
            case "Especial":
                cartaLayout.setBackgroundResource(R.drawable.borda_especial);
                textoRaridade.setTextColor(0xFFFF7D7D); // vermelho
                break;
        }

        // Clique com animação
        botaoVender.setOnClickListener(v -> {
            animarVenda(cartaLayout, () -> {
                onVenderClick.accept(carta);
                Toast.makeText(context, "Carta vendida!", Toast.LENGTH_SHORT).show();
            });
        });

        imagemCarta.setOnClickListener(v -> mostrarCartaAmpliada(carta));
        return convertView;
    }

    // Retorna o valor da carta conforme raridade
    private int getValorCarta(String raridade) {
        switch (raridade) {
            case "Comum": return 10;
            case "Incomum": return 25;
            case "Rara": return 50;
            case "Épica": return 100;
            case "Lendária": return 200;
            case "Especial": return 500;
            default: return 0;
        }
    }

    // Pequena animação ao vender (fade + scale)
    private void animarVenda(View view, Runnable onComplete) {
        view.animate()
                .alpha(0f)
                .scaleX(0.85f)
                .scaleY(0.85f)
                .setDuration(300)
                .withEndAction(() -> {
                    view.setAlpha(1f);
                    view.setScaleX(1f);
                    view.setScaleY(1f);
                    onComplete.run();
                })
                .start();
    }

    private void mostrarCartaAmpliada(Carta carta) {
        android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(context);
        View dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_carta_ampliada, null);

        ImageView imagemAmpliada = dialogView.findViewById(R.id.imagemCartaAmpliada);
        TextView nomeAmpliado = dialogView.findViewById(R.id.nomeCartaAmpliada);
        TextView raridadeAmpliada = dialogView.findViewById(R.id.raridadeCartaAmpliada);
        View cartaLayout = dialogView.findViewById(R.id.cartaLayoutAmpliada); // container para a borda

        nomeAmpliado.setText(carta.getNome());
        raridadeAmpliada.setText(carta.getRaridade());

        int resId = context.getResources().getIdentifier(carta.getImagem(), "drawable", context.getPackageName());
        if (resId != 0) {
            imagemAmpliada.setImageResource(resId);
        }

        // Define a borda conforme raridade (mesmo estilo da PacotesActivity)
        switch (carta.getRaridade()) {
            case "Comum":
                cartaLayout.setBackgroundResource(R.drawable.borda_comum);
                raridadeAmpliada.setTextColor(Color.parseColor("#607D8B"));
                break;
            case "Incomum":
                cartaLayout.setBackgroundResource(R.drawable.borda_incomum);
                raridadeAmpliada.setTextColor(Color.parseColor("#4CAF50"));
                break;
            case "Rara":
                cartaLayout.setBackgroundResource(R.drawable.borda_rara);
                raridadeAmpliada.setTextColor(Color.parseColor("#7E57C2"));
                break;
            case "Épica":
                cartaLayout.setBackgroundResource(R.drawable.borda_epica);
                raridadeAmpliada.setTextColor(Color.parseColor("#6A1B9A"));
                break;
            case "Lendária":
                cartaLayout.setBackgroundResource(R.drawable.borda_lendaria);
                raridadeAmpliada.setTextColor(Color.parseColor("#FFD600"));
                break;
            case "Especial":
                cartaLayout.setBackgroundResource(R.drawable.borda_especial);
                raridadeAmpliada.setTextColor(Color.parseColor("#ef736c"));
                break;
        }

        builder.setView(dialogView);
        android.app.AlertDialog dialog = builder.create();

        // Fundo transparente e animação de entrada
        if (dialog.getWindow() != null) {
            dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
            dialog.getWindow().getAttributes().windowAnimations = android.R.style.Animation_Dialog;
        }

        dialog.show();
    }


}





