package hr.com.port.ips.eracun.provider.mer.enums;

import java.util.HashMap;
import java.util.Map;

public enum MerDocumentType {

    INVOICE(1, "Invoice", "Račun", "380"),
    UNKNOWN(-1, "Unknown", "Nepoznat tip", "0");

    private final int id;
    private final String code;
    private final String naziv;
    private final String ublCode;

    private static final Map<Integer, MerDocumentType> BY_ID = new HashMap<>();
    private static final Map<String, MerDocumentType> BY_CODE = new HashMap<>();
    private static final Map<String, MerDocumentType> BY_UBL_CODE = new HashMap<>();

    static { // mape za brzi lookup
        for (MerDocumentType type : values()) {
            BY_ID.put(type.id, type);
            BY_CODE.put(type.code.toLowerCase(), type);
            BY_UBL_CODE.put(type.ublCode.toLowerCase(), type);
        }
    }

    MerDocumentType(int id, String code, String naziv, String ublCode) {
        this.id = id;
        this.code = code;
        this.naziv = naziv;
        this.ublCode = ublCode;
    }

    public int getId() {
        return id;
    }

    public String getCode() {
        return code;
    }

    public String getNaziv() {
        return naziv;
    }

    public String getUblCode() {
        return ublCode;
    }

    public static MerDocumentType fromId(int id) {
        return BY_ID.getOrDefault(id, UNKNOWN);
    }

    public static MerDocumentType fromCode(String code) {
        if (code == null) return UNKNOWN;
        return BY_CODE.getOrDefault(code.toLowerCase(), UNKNOWN);
    }

    public static MerDocumentType fromUblCode(String ublCode) {
        if (ublCode == null) return UNKNOWN;
        return BY_UBL_CODE.getOrDefault(ublCode.toLowerCase(), UNKNOWN);
    }
}