package dev.lions.unionflow.server.resource;

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

import io.quarkus.test.junit.QuarkusTest;
import io.restassured.http.ContentType;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

@QuarkusTest
class HealthResourceTest {

    @Test
    @DisplayName("GET /api/status retourne 200 avec status UP")
    void getStatus_returns200AndUp() {
        given()
                .when()
                .get("/api/status")
                .then()
                .statusCode(200)
                .contentType(ContentType.JSON)
                .body("status", equalTo("UP"))
                .body("service", equalTo("UnionFlow Server"))
                .body("version", equalTo("1.0.0"))
                .body("timestamp", notNullValue())
                .body("message", equalTo("Serveur opérationnel"));
    }

    @Test
    @DisplayName("GET /api/status avec Accept inconnu retourne 200 (endpoint toujours accessible)")
    void getStatus_acceptHeaderDifferent_returns200() {
        given()
                .header("Accept", "application/json")
                .when()
                .get("/api/status")
                .then()
                .statusCode(200)
                .body("status", equalTo("UP"));
    }

    @Test
    @DisplayName("GET /api/status/inexistant retourne 404")
    void getStatusInexistant_returns404() {
        given()
                .when()
                .get("/api/status/inexistant")
                .then()
                .statusCode(404);
    }

    @Test
    @DisplayName("POST /api/status retourne 405 (méthode non autorisée)")
    void postStatus_returns405() {
        given()
                .contentType(ContentType.JSON)
                .body("{}")
                .when()
                .post("/api/status")
                .then()
                .statusCode(405);
    }
}
