package edu.whs.spin2018.baoapp.views.lobby;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import edu.whs.spin2018.baoapp.R;

public class BenutzerAdapter extends RecyclerView.Adapter<BenutzerAdapter.BenutzerViewHolder> {

    private final LobbyContract.Presenter presenter;

    /**
     * Adapter zum aktualisieren der RecyclerView bei Änderungen im Datensatz.
     *
     * @param presenter - Presenter, der die Daten verwaltet
     */
    public BenutzerAdapter(LobbyContract.Presenter presenter) {
        this.presenter = presenter;
    }


    //Wird aufgerufen, wenn die RecyclerView einen neuen ViewHolder braucht um ein neues Item
    //anzuzeigen
    @NonNull
    @Override
    public BenutzerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new BenutzerViewHolder(LayoutInflater.from(parent.getContext())
                .inflate(R.layout.benutzer_item, parent, false));
    }

    //Wird von der RecyclerView aufgerufen um die Daten an der enstprechenden Position anzuzeigen
    @Override
    public void onBindViewHolder(@NonNull BenutzerViewHolder holder, int position) {
        presenter.onBindBenutzerItemView(position, holder);
    }

    @Override
    public int getItemCount() {
        return presenter.gibLobbyBenutzerItemAnzahl();
    }

    /**
     * Beschreibt eine ItemView und Metadaten über ihre Position in der RecyclerView
     */
    public static class BenutzerViewHolder extends RecyclerView.ViewHolder implements BenutzerItemView {

        /**
         * View des UserItems, welche den Username beinhaltet.
         */
        private final TextView benutzername;

        /**
         * View des UserItems, welche die ID beinhaltet.
         */
        private final TextView UUID;

        /**
         * Beschreibt eine ItemView und Metadaten über ihren Platz in der RecyclerView
         *
         * @param itemView View, welche einen Eintrag in der Liste darstellen soll
         */
        BenutzerViewHolder(@NonNull final View itemView) {
            super(itemView);
            this.benutzername = itemView.findViewById(R.id.userName);
            this.UUID = itemView.findViewById(R.id.userID);
        }


        @Override
        public void setzeBenutzernamen(String benutzername) {
            this.benutzername.setText(benutzername);
        }

        @Override
        public void setzeUUID(String UUID) {
            this.UUID.setText(UUID);
        }
    }
}
