package hr.com.port.ips.eracun.resilience.mer;

import java.io.InterruptedIOException;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import javax.net.ssl.SSLException;

public final class MerTriageHelper {

    public enum Category {
        CONNECTIVITY, SERVER_5XX, CLIENT_4XX, PARSER, UNKNOWN
    }

    private MerTriageHelper() {}
    
    public static Category inferCategory(Throwable ex, Integer httpStatusMaybe) {
        if (ex == null) return Category.UNKNOWN;

        // mreža/SSL/timeout → CONNECTIVITY
        if (ex instanceof UnknownHostException ||
            ex instanceof ConnectException ||
            ex instanceof SocketTimeoutException ||
            ex instanceof InterruptedIOException ||
            ex instanceof SSLException) {
            return Category.CONNECTIVITY;
        }

        // ako znaš HTTP status (ako ga jednom počneš prosljeđivati)
        if (httpStatusMaybe != null) {
            if (httpStatusMaybe >= 500) return Category.SERVER_5XX;
            if (httpStatusMaybe >= 400) return Category.CLIENT_4XX;
        }

        // parserske greške
        String name = ex.getClass().getName().toLowerCase();
        if (name.contains("parse") || name.contains("json") || name.contains("jaxb") || name.contains("xml")) {
            return Category.PARSER;
        }

        return Category.UNKNOWN;
    }

    // Za MVP-light: bacamo samo za trajne greške
    public static boolean shouldThrow(Category c) {
        return (c == Category.CLIENT_4XX || c == Category.PARSER);
    }
}