package infrastructure.service;

import domain.model.ErrorCode;
import infrastructure.config.AppConfig;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;

import java.util.Optional;

@ApplicationScoped
public class StatusDescriptionResolver {

    private final AppConfig appConfig;
    private final ErrorCode genericError;

    @Inject
    public StatusDescriptionResolver(AppConfig appConfig) {
        this.appConfig = appConfig;
        // Definimos un código de error genérico por si no se encuentra el que buscamos
        this.genericError = new ErrorCode("409", "CONFLICT", "409", "CONFLICT", "error");
    }

    /**
     * Busca un ErrorCode por su backend_code.
     * Si no lo encuentra, devuelve un ErrorCode genérico de "Error Interno".
     *
     * @param backendCode El código a buscar (ej. "200", "VDE01", "404").
     * @return El ErrorCode encontrado o uno genérico. Nunca es nulo.
     */
    public ErrorCode getCode(String backendCode) {
        // Usamos Optional.ofNullable para manejar el caso en que el código no exista en el mapa
        return Optional.ofNullable(appConfig.getErrorCodeMap().get(backendCode))
                .orElse(genericError);
    }

    /**
     * Alternativa manejar el caso "no encontrado" manualmente.
     *
     * @param backendCode El código a buscar.
     * @return Un Optional<ErrorCode> que estará vacío si no se encuentra el código.
     */
    public Optional<ErrorCode> findCode(String backendCode) {
        return Optional.ofNullable(appConfig.getErrorCodeMap().get(backendCode));
    }
}