package edu.whs.spin2018.baoapp.model.remote.lobby;

import edu.whs.spin2018.baoapp.model.Benutzer;
import edu.whs.spin2018.baoapp.model.remote.BaseInteractorInterface;

/**
 * Definiert die Methoden, mit denen der Presenter Events über den ServiceInteractor verschicken
 * und erhalten kann
 */
public interface LobbyRemoteDataSource extends LobbyEventListener, BaseInteractorInterface {

    /**
     * Sendet eine Herausforderung an den angegeben Benutzer.
     *
     * @param empfaengerUUID - Benutzer, der herausgefordert werden soll
     * @param ich            - Daten des Absenders
     */
    void sendeHerausforderung(String empfaengerUUID, Benutzer ich);

    /**
     * Sendet dem Herausforderer, dass die Herausforderung abgelehnt wurde.
     *
     * @param absenderUUID - uuid des Absenders, um die Nachricht richtig zuzustellen
     */
    void lehneHerausforderungAb(String absenderUUID);

    /**
     * Sendet dem Herausforderer, dass die Herausforderung angenommen wurde.
     *
     * @param gegnerUUID - uuid des Gegners um die Nachricht richtig zuzustellen
     */
    void nimmHerausforderungAn(String gegnerUUID);

    /**
     * Fordert die Benutzer aus der Lobby an.
     */
    void ladeBenutzerInLobby();

    /**
     * Verlaesst die Lobby in dem der Raum "Lobby" verlassen wird.
     */
    void verlasseLobby();

    /**
     * Verlaesst den aktuellen Raum.
     */
    void verlasseAktuellenRaum();

    /**
     * Tritt der Lobby bei.
     */
    void geheInLobby();

    /**
     * Tritt einem neuen Raum bei.
     *
     * @param neuerRaum - Raum, der betreten werden soll
     */
    void geheInNeuenRaum(String neuerRaum);

    /**
     * Setzt einen Listener, der bei einkommenden Events benachrichtigt wird.
     *
     * @param listener - Listener, der gesetzt werden soll
     */
    void setzeListener(LobbyEventListener listener);
}
