package com.example.quiz.data.adapter;

import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.quiz.R;
import com.example.quiz.data.model.Pari;
import java.util.ArrayList;
import java.util.List;

public class LastBetsAdapter extends RecyclerView.Adapter<LastBetsAdapter.LastBetsViewHolder> {

    private List<Pari> listeParis = new ArrayList<>(); // évite les NPE
    private OnBetClick onBetClick; // peut être null si tu veux

    public interface OnBetClick {
        void onItemClick(Pari pari);
    }

    public LastBetsAdapter(List<Pari> listeParis, OnBetClick onBetClick) {
        if (listeParis != null) this.listeParis = listeParis;
        this.onBetClick = onBetClick;
    }

    // Constructeur vide utile si tu veux créer puis setData ensuite
    public LastBetsAdapter(OnBetClick onBetClick) {
        this.onBetClick = onBetClick;
    }

    public void setData(List<Pari> newList) {
        if (newList == null) {
            this.listeParis = new ArrayList<>();
        } else {
            this.listeParis = newList;
        }
        notifyDataSetChanged();
    }

    public void addItem(Pari pari) {
        if (pari == null) return;
        this.listeParis.add(pari);
        notifyItemInserted(listeParis.size() - 1);
    }

    public void clear() {
        this.listeParis.clear();
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public LastBetsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.last_bets_item, parent, false);
        return new LastBetsViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull LastBetsViewHolder holder, int position) {
        Pari pari = listeParis.get(position);
        if (pari == null) return;

        holder.typeOfCourse.setText(pari.getCourse().getType());
        holder.refenceTicket.setText(pari.getNumeroTicket());

        // Type (défensif : vérifie null)
        holder.betType.setText(pari.getTypePari() != null ? pari.getTypePari() : "-");

        // Course (défensif : course peut être null)
        if (pari.getCourse() != null) {
            holder.course.setText("Course: " + pari.getCourse().getId());
        } else {
            holder.course.setText("Course: -");
        }

        // Chevaux : join en toute sécurité (gère Integer list ou String list)
        List<?> chevaux = pari.getChevauxSelectionnes();
        if (chevaux != null && !chevaux.isEmpty()) {
            // convertir en strings
            List<String> str = new ArrayList<>(chevaux.size());
            for (Object o : chevaux) {
                str.add(String.valueOf(o));
            }
            // TextUtils.join est compatible avec tous les niveaux API
            holder.horses.setText("Chevaux : " + TextUtils.join("-", str));
        } else {
            holder.horses.setText("Chevaux : -");
        }

        // Mise (défensif)
        holder.mise.setText("Mise: " + pari.getMise()  + " CFA");

        // click listener défensif
        holder.itemView.setOnClickListener(v -> {
            if (onBetClick != null) onBetClick.onItemClick(pari);
        });
    }

    @Override
    public int getItemCount() {
        return (listeParis != null) ? listeParis.size() : 0;
    }

    public static class LastBetsViewHolder extends RecyclerView.ViewHolder {
        TextView betType, horses, course, mise, refenceTicket, typeOfCourse;

        public LastBetsViewHolder(@NonNull View itemView) {
            super(itemView);
            betType = itemView.findViewById(R.id.last_bet_type);
            course = itemView.findViewById(R.id.last_bet_course);
            horses = itemView.findViewById(R.id.last_bet_horses);
            mise = itemView.findViewById(R.id.last_bet_mise);
            refenceTicket = itemView.findViewById(R.id.reference_ticket);
            typeOfCourse = itemView.findViewById(R.id.type_of_course);
        }
    }
}
