package model;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import db.UserDAO;

public class PersonMapping {

    private static final Map<String, String> KUERZEL_TO_NAME = new LinkedHashMap<>();
    private static final List<String> ADMINS = List.of("cbu615", "jbo733");

    private static String dbPath = null;
    private static boolean initialized = false;

    /** Holt die Daten aus der DB, falls noch nicht erfolgt */
    private static synchronized void loadPeople() {
        dbPath = util.Config.getDbPath();
        if (dbPath == null) throw new IllegalStateException("DB-Pfad nicht gesetzt!");
        UserDAO dao = new UserDAO(dbPath);
        List<String[]> users = dao.getAllUsers();
        KUERZEL_TO_NAME.clear();
        for (String[] user : users) {
            KUERZEL_TO_NAME.put(user[0], user[1]);
        }
        initialized = true;
    }

    /** Prüft, ob geladen, und lädt ggf. */
    private static void listLoadedCheck() {
        if (!initialized) {
        	System.out.println("load");
            loadPeople();
        }
    }

    public static void forceReloadPeople() {
        // Nur explizit von außen aufrufen!
        loadPeople();
    }

    public static boolean isAdmin(String login) {
        if (login == null) return false;
        login = normalizeLogin(login);
        return ADMINS.contains(login.toLowerCase());
    }

    /** Kürzel → Klarname */
    public static String toName(String kuerzel) {
        listLoadedCheck();
        if (kuerzel == null || kuerzel.isBlank()) return "";
        return KUERZEL_TO_NAME.getOrDefault(kuerzel, kuerzel);
    }

    /** Klarname → Kürzel */
    public static String toKuerzel(String name) {
        listLoadedCheck();
        if (name == null || name.isBlank()) return "";
        for (Map.Entry<String, String> e : KUERZEL_TO_NAME.entrySet()) {
            if (e.getValue().equalsIgnoreCase(name.trim())) {
                return e.getKey();
            }
        }
        return name;
    }

    /** Für Dropdown-Menüs: alle Klarnamen (sortiert nach Eintragungsreihenfolge) */
    public static java.util.List<String> getAllNames() {
        listLoadedCheck();
        return new java.util.ArrayList<>(KUERZEL_TO_NAME.values());
    }

    public static String normalizeLogin(String login) {
        if (login == null) return "";
        login = login.trim().toLowerCase();
        return login;
    }
}