package dev.lions.unionflow.server.resource;

import static io.restassured.RestAssured.given;
import static org.hamcrest.Matchers.*;
import static org.hamcrest.CoreMatchers.anyOf;
import static org.hamcrest.CoreMatchers.equalTo;

import io.quarkus.test.junit.QuarkusTest;
import io.quarkus.test.security.TestSecurity;
import io.restassured.http.ContentType;
import java.util.UUID;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

@QuarkusTest
class FavorisResourceTest {

    @Test
    @TestSecurity(user = "admin@unionflow.com", roles = { "ADMIN" })
    @DisplayName("GET /api/favoris/utilisateur/{id} retourne 200")
    void listerFavoris_returns200() {
        given()
                .pathParam("utilisateurId", UUID.randomUUID())
                .when()
                .get("/api/favoris/utilisateur/{utilisateurId}")
                .then()
                .statusCode(200)
                .body("$", notNullValue());
    }

    @Test
    @TestSecurity(user = "admin@unionflow.com", roles = { "ADMIN" })
    @DisplayName("POST /api/favoris avec corps vide retourne 4xx")
    void creerFavori_corpsVide_returns4xx() {
        given()
                .contentType(ContentType.JSON)
                .body("{}")
                .when()
                .post("/api/favoris")
                .then()
                .statusCode(anyOf(equalTo(400), equalTo(500)));
    }

    @Test
    @TestSecurity(user = "admin@unionflow.com", roles = { "ADMIN" })
    @DisplayName("DELETE /api/favoris/{id} retourne 204 ou 404")
    void supprimerFavori_returns204Ou404() {
        given()
                .pathParam("id", UUID.randomUUID())
                .when()
                .delete("/api/favoris/{id}")
                .then()
                .statusCode(anyOf(equalTo(204), equalTo(404), equalTo(500)));
    }

    @Test
    @TestSecurity(user = "admin@unionflow.com", roles = { "ADMIN" })
    @DisplayName("GET /api/favoris/utilisateur/{id}/statistiques retourne 200")
    void obtenirStatistiques_returns200() {
        given()
                .pathParam("utilisateurId", UUID.randomUUID())
                .when()
                .get("/api/favoris/utilisateur/{utilisateurId}/statistiques")
                .then()
                .statusCode(200)
                .body("$", notNullValue());
    }
}
