package dev.lions.unionflow.server.exception;

import com.fasterxml.jackson.core.JsonProcessingException;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.ext.ExceptionMapper;
import jakarta.ws.rs.ext.Provider;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
 * Exception Mapper pour les erreurs de traitement JSON (parsing, format, etc.).
 * Retourne un 400 Bad Request avec un message détaillé.
 *
 * @author UnionFlow Team
 * @version 1.0
 * @since 2026-03-19
 */
@Slf4j
@Provider
public class JsonProcessingExceptionMapper implements ExceptionMapper<JsonProcessingException> {

    @Override
    public Response toResponse(JsonProcessingException exception) {
        log.warn("JSON processing error: {}", exception.getMessage());

        Map<String, Object> errorBody = new HashMap<>();
        errorBody.put("message", "Erreur de traitement JSON");
        errorBody.put("details", exception.getOriginalMessage() != null
                ? exception.getOriginalMessage()
                : exception.getMessage());
        errorBody.put("status", 400);
        errorBody.put("timestamp", java.time.LocalDateTime.now().toString());

        return Response.status(Response.Status.BAD_REQUEST)
                .entity(errorBody)
                .build();
    }
}
