package legion.muyue.best2048.network; // Créez un sous-package network

import legion.muyue.best2048.data.GameInfo;
import legion.muyue.best2048.data.GameStateResponse;
import legion.muyue.best2048.data.MoveRequest;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query; // Pour éventuels paramètres de création
import legion.muyue.best2048.data.PlayerIdRequest;

public interface ApiService {

    /**
     * Crée une nouvelle partie ou rejoint une partie en attente (matchmaking simple).
     * TODO: Définir les paramètres nécessaires (ex: ID du joueur).
     * @return Informations sur la partie créée/rejointe.
     */
    @POST("games") // Endpoint: /api/games (POST)
    Call<GameInfo> createOrJoinGame(@Body PlayerIdRequest playerIdRequest);

    /**
     * Récupère l'état actuel complet d'une partie spécifique.
     * @param gameId L'identifiant unique de la partie.
     * @return L'état actuel du jeu.
     */
    @GET("games/{gameId}")
    Call<GameStateResponse> getGameState(@Path("gameId") String gameId);

    /**
     * Soumet le mouvement d'un joueur pour une partie spécifique.
     * Le serveur validera si c'est bien le tour de ce joueur.
     * @param gameId L'identifiant unique de la partie.
     * @param moveRequest L'objet contenant la direction du mouvement et l'ID du joueur.
     * @return Le nouvel état du jeu après application du mouvement (ou un message d'erreur).
     */
    @POST("games/{gameId}/moves")
    Call<GameStateResponse> makeMove(@Path("gameId") String gameId, @Body MoveRequest moveRequest);

}