package fr.monkhanny.dorfromantik.utils;

import fr.monkhanny.dorfromantik.enums.Fonts;

import java.awt.*;
import java.io.IOException;

public class FontManager {

    private static Font titleFont;
    private static Font buttonFont;

    // Charge et applique la police spécifique en fonction de Fonts
    public static void loadCustomFont(Fonts fontEnum) {
        try {
            Font loadedFont = FontLoader.loadFont(fontEnum);
            if (fontEnum == Fonts.TITLE) {
                titleFont = loadedFont;
            } else if (fontEnum == Fonts.BUTTON) {
                buttonFont = loadedFont;
            }
        } catch (IOException | FontFormatException e) {
            throw new RuntimeException("Failed to load font: " + fontEnum, e);
        }
    }

    // Obtient la police du titre avec une taille spécifique
    public static Font getTitleFont(float size) {
        if (titleFont == null) {
            throw new IllegalStateException("Title font not loaded. Please load the font first.");
        }
        return titleFont.deriveFont(size);
    }

    // Obtient la police du bouton avec une taille spécifique
    public static Font getButtonFont(float size) {
        if (buttonFont == null) {
            throw new IllegalStateException("Button font not loaded. Please load the font first.");
        }
        return buttonFont.deriveFont(size);
    }

    // Ajuste la taille de la police du titre selon la taille du composant sans la modifier directement
    public static Font getAdjustedTitleFont(Component component, float minSize, float maxSize) {
        if (titleFont == null) {
            throw new IllegalStateException("Title font not loaded. Please load the font first.");
        }
        float newSize = Math.max(minSize, Math.min(maxSize, component.getWidth() / 12f));
        return titleFont.deriveFont(newSize);
    }

    // Ajuste la taille de la police du bouton selon la taille du composant sans la modifier directement
    public static Font getAdjustedButtonFont(Component component, float minSize, float maxSize) {
        if (buttonFont == null) {
            throw new IllegalStateException("Button font not loaded. Please load the font first.");
        }
        float newSize = Math.max(minSize, Math.min(maxSize, component.getHeight() / 20f));
        return buttonFont.deriveFont(newSize);
    }

    // Définir manuellement une police de titre personnalisée
    public static void setTitleFont(Font font) {
        titleFont = font;
    }

    // Définir manuellement une police de bouton personnalisée
    public static void setButtonFont(Font font) {
        buttonFont = font;
    }
}
