import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {

    // GLOBAL CLASS VARIABLE
    private final ArrayList<RowItem> appData;
    private final LayoutInflater inflateLayout;
    private ItemClickListener clickListen;

    // CLASS CONSTRUCTOR - WE PASS IN A CONTEXT OBJECT AND A ARRAYLIST OF RowItems
    MyRecyclerViewAdapter(Context context, ArrayList<RowItem> data) {
        this.inflateLayout = LayoutInflater.from(context);
        this.appData = data;
    }

    // INFLATE AN XML LAYOUT ROW
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = inflateLayout.inflate(R.layout.recycler_rows, parent, false);
        return new ViewHolder(view);
    }

    //EACH ITEM IN YOUR XML VIEW NEEDS TO BOUND TO A VIEWHOLDER. WE'RE BINDING TWO TEXTVIEWS AND AN IMAGEVIEW.
    @Override
    public void onBindViewHolder(ViewHolder vh, int position) {
        vh.myTextView.setText(appData.get(position).getHeading());
        vh.mySubHeading.setText(appData.get(position).getSubHeading());
        vh.myImage.setImageResource(appData.get(position).getSmallImageName());
    }

    // GET HOW MANY ROWS ARE IN YOUR APP
    @Override
    public int getItemCount() {
        return appData.size();
    }


    //THE VIEW HOLDER HOLDS ALL THE VIEWS FROM YOUR XML FILE. THEY NEED TO BE RECYCLED AS YOU SCROLL
    //ALSO, WE ADD A CLICK LISTENER FOR WHEN YOU CLICK/TAP A LIST ITEM
    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView myTextView;
		TextView mySubHeading;
        ImageView myImage;

        ViewHolder(View itemView) {
            super(itemView);
            myTextView = itemView.findViewById(R.id.textHeading);  //THE NAME OF YOUR XML FILE THAT HOLD YOUR VIEWS
            mySubHeading = itemView.findViewById(R.id.textSubHeading);
            myImage = itemView.findViewById(R.id.imgSmallFlag);
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            if (clickListen != null) clickListen.onItemClick(view, getAdapterPosition());
        }
    }

    // GET THE DATA AT A CLICK POSITION
    int getItem(int id) {
        return appData.get(id).getSmallImageName();
    }

    // CATCH THE CLICK/TAP
    void setClickListener(ItemClickListener itemClickListener) {
        this.clickListen = itemClickListener;
    }

    // INTERFACE DETECTS CLICK EVENTS. THE METHOD IN THE INTERFACE IS onItemClick
    public interface ItemClickListener {
        void onItemClick(View view, int position);
    }
}
