package com.example.tampopo_client.views;

import androidx.recyclerview.widget.RecyclerView;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.tampopo_client.models.FriendRequest;
import com.example.tampopo_client.viewmodels.FriendReceivedRequestViewModel;
import com.example.tampopo_client.viewmodels.FriendViewModel;
import com.example.tampopo_client.views.placeholder.FriendRequestContent.FriendRequestItem;
import com.example.tampopo_client.databinding.FragmentFriendReceivedBinding;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;


// このクラスは RecyclerView.Adapter を継承していて、FriendRequestItem を表示するアダプター
public class MyFriendRequestRecyclerViewAdapter extends RecyclerView.Adapter<MyFriendRequestRecyclerViewAdapter.ViewHolder> {

    // 表示するFriendRequestItemのリスト（アダプターのデータ）
    private final List<FriendRequest> items;

    private FriendViewModel friendViewModel;
    private String receiverId;
    private String token;

    // コンストラクタ：アダプターを初期化し、表示データのリストを受け取る
    public MyFriendRequestRecyclerViewAdapter(List<FriendRequest> items, FriendViewModel friendViewModel, String receiverId, String token) {
        this.items = new ArrayList<>(items);
        this.friendViewModel = friendViewModel;
        this.receiverId = receiverId;
        this.token = token;

    }

    public void setItems(List<FriendRequest> newItems) {
        items.clear();
        items.addAll(newItems);
    }

    // ビュー（行）を新しく作成するときに呼ばれる（レイアウトのXMLを元に1行分のViewを作成）
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // fragment_friend_received.xml を元に View を生成して ViewHolder に渡す
        return new ViewHolder(FragmentFriendReceivedBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
    }

    // 表示するデータを、対応するViewHolderのUI部品にセットする（スクロール時など）
    // onBindViewHolder:表示するアイテムの「中身」を設定する処理を書くところ
    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        // 現在の位置の FriendRequestItem を取得して ViewHolder に保持させる
        holder.mItem = items.get(position);
        // 名前（name）を TextView に表示する
        holder.mContentView.setText(items.get(position).getSenderId());

        // 「許可」ボタンを押した時の処理
        holder.allowButton.setOnClickListener(v -> {
            // フレンド許可APIを叩く
            String senderId = holder.mItem.getSenderId(); //許可を押して相手(senderID)のIDを取得

            // 例：ViewModelにフレンド登録処理を依頼する
            friendViewModel.createFriend(token, senderId, receiverId);

            Toast.makeText(v.getContext(), "フレンド申請を許可しました", Toast.LENGTH_SHORT).show();
        });

    }

    // リスト全体のアイテム数を返す（RecyclerViewに何個表示するかを教える）
    @Override
    public int getItemCount() {
        return items.size();
    }

    // 各行（View）を保持するための ViewHolder クラス
    public class ViewHolder extends RecyclerView.ViewHolder {
        // TextView：表示される友達の名前
        public final TextView mContentView;
        // 表示する1つのFriendRequestItemを保持
        public FriendRequest mItem;
        public View allowButton;

        // ViewHolderのコンストラクタ：バインディングされたViewを使ってUI部品にアクセスする
        public ViewHolder(FragmentFriendReceivedBinding binding) {
            // 親クラスのコンストラクタに、View全体を渡す
            super(binding.getRoot());
            // fragment_friend_received.xml 内の TextView（contentというid）に対応する変数をセット
            mContentView = binding.content;
            allowButton = binding.AllowButton;

        }

        // デバッグやログ出力用に、表示中のテキストを返す
        @Override
        public String toString() {
            return super.toString() + " '" + mContentView.getText() + "'";
        }

        public void onAccept(String id) {
        }
    }
}