package de.avatic.lcc.model.db.country;

/**
 * Repräsentiert die geografischen Regionen für Länderklassifizierungen.
 * EMEA - Europa, Mittlerer Osten und Afrika
 * APAC - Asien und Pazifikraum
 * LATAM - Lateinamerika
 * NAM - Nordamerika
 */
public enum RegionCode {
    EMEA("Europa, Mittlerer Osten und Afrika"),
    APAC("Asien und Pazifikraum"),
    LATAM("Lateinamerika"),
    NAM("Nordamerika");

    private final String beschreibung;

    RegionCode(String beschreibung) {
        this.beschreibung = beschreibung;
    }

    /**
     * Gibt die Beschreibung der Region zurück.
     *
     * @return Die ausführliche Beschreibung der Region
     */
    public String getBeschreibung() {
        return beschreibung;
    }

    /**
     * Konvertiert einen String in den entsprechenden RegionCode Enum-Wert.
     *
     * @param code Der Regions-Code als String
     * @return Der entsprechende Enum-Wert
     * @throws IllegalArgumentException wenn der angegebene Code ungültig ist
     */
    public static RegionCode fromString(String code) {
        if (code != null) {
            try {
                return valueOf(code.toUpperCase());
            } catch (IllegalArgumentException e) {
                throw new IllegalArgumentException("Ungültiger Regions-Code: " + code, e);
            }
        }
        throw new IllegalArgumentException("Regions-Code darf nicht null sein");
    }

    /**
     * Gibt den Regions-Code als String zurück.
     *
     * @return Der Regions-Code als String
     */
    public String getCode() {
        return name();
    }
}