package de.oaa.xxx.app.data.api

import de.oaa.xxx.app.data.model.AufgabeAnzeige
import de.oaa.xxx.app.data.model.AufgabenList
import de.oaa.xxx.app.data.model.Mitspieler
import de.oaa.xxx.app.data.model.Session
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
import retrofit2.http.Query

interface SessionApi {

    @GET("session/{sessionId}")
    suspend fun getBySessionId(@Path("sessionId") sessionId: String): Response<Session>

    @GET("session")
    suspend fun getByUserId(@Query("userId") userId: String): Response<Session>

    @POST("session")
    suspend fun createSession(@Body session: Session): Response<Unit>

    @DELETE("session")
    suspend fun deleteSession(@Body session: Session): Response<Unit>

    @POST("session/{sessionId}/aufgaben")
    suspend fun setAufgaben(
        @Path("sessionId") sessionId: String,
        @Body list: AufgabenList
    ): Response<Unit>

    @GET("session/{sessionId}/aufgaben/next")
    suspend fun getNextAufgabe(@Path("sessionId") sessionId: String): Response<AufgabeAnzeige>

    @POST("session/{sessionId}/mitspieler")
    suspend fun addMitspieler(
        @Path("sessionId") sessionId: String,
        @Body mitspieler: Mitspieler
    ): Response<Unit>

    @GET("session/{sessionId}/finisher")
    suspend fun getFinisher(@Path("sessionId") sessionId: String): Response<List<AufgabeAnzeige>>

    @POST("session/{sessionId}/backToLevel5")
    suspend fun backToLevel5(@Path("sessionId") sessionId: String): Response<Unit>
}
