package dev.bytevibe.hyperpoint;

import javafx.scene.paint.Color;
import java.util.HashMap;
import java.util.Map;

/**
 * 主题管理器，管理和切换应用主题
 */
public class ThemeManager {
    private static final ThemeManager instance = new ThemeManager();
    private Map<String, Theme> themes;
    private Theme currentTheme;
    private Runnable onThemeChanged;

    private ThemeManager() {
        themes = new HashMap<>();
        initializeDefaultThemes();
        currentTheme = themes.get("Light");
    }

    /**
     * 获取单例实例
     */
    public static ThemeManager getInstance() {
        return instance;
    }

    /**
     * 初始化默认主题
     */
    private void initializeDefaultThemes() {
        // 浅色主题
        themes.put("Light", new Theme(
                "Light",
                Color.web("#FFFFFF"),           // 背景颜色 - 白色
                Color.web("#F5F5F5"),           // 菜单栏颜色 - 浅灰
                Color.web("#333333"),           // 菜单文字 - 深灰
                Color.web("#FFFFFF"),           // 页面背景 - 白色
                Color.web("#CCCCCC"),           // 边框色 - 浅灰
                Color.web("#007AFF"),           // 主色调 - 蓝色
                Color.web("#E8E8E8")            // 次色调 - 浅灰
        ));

        // 深色主题
        themes.put("Dark", new Theme(
                "Dark",
                Color.web("#2B2B2B"),           // 背景颜色 - 深灰
                Color.web("#1E1E1E"),           // 菜单栏颜色 - 更深灰
                Color.web("#E0E0E0"),           // 菜单文字 - 浅灰
                Color.web("#333333"),           // 页面背景 - 深灰
                Color.web("#444444"),           // 边框色 - 中灰
                Color.web("#0A84FF"),           // 主色调 - 亮蓝
                Color.web("#555555")            // 次色调 - 中灰
        ));

        // 蓝色主题
        themes.put("Blue", new Theme(
                "Blue",
                Color.web("#E3F2FD"),           // 背景颜色 - 浅蓝
                Color.web("#1976D2"),           // 菜单栏颜色 - 蓝色
                Color.web("#FFFFFF"),           // 菜单文字 - 白色
                Color.web("#FFFFFF"),           // 页面背景 - 白色
                Color.web("#1976D2"),           // 边框色 - 蓝色
                Color.web("#1976D2"),           // 主色调 - 蓝色
                Color.web("#E3F2FD")            // 次色调 - 浅蓝
        ));

        // 绿色主题
        themes.put("Green", new Theme(
                "Green",
                Color.web("#E8F5E9"),           // 背景颜色 - 浅绿
                Color.web("#388E3C"),           // 菜单栏颜色 - 绿色
                Color.web("#FFFFFF"),           // 菜单文字 - 白色
                Color.web("#FFFFFF"),           // 页面背景 - 白色
                Color.web("#388E3C"),           // 边框色 - 绿色
                Color.web("#388E3C"),           // 主色调 - 绿色
                Color.web("#E8F5E9")            // 次色调 - 浅绿
        ));

        // 紫色主题
        themes.put("Purple", new Theme(
                "Purple",
                Color.web("#F3E5F5"),           // 背景颜色 - 浅紫
                Color.web("#7B1FA2"),           // 菜单栏颜色 - 紫色
                Color.web("#FFFFFF"),           // 菜单文字 - 白色
                Color.web("#FFFFFF"),           // 页面背景 - 白色
                Color.web("#7B1FA2"),           // 边框色 - 紫色
                Color.web("#7B1FA2"),           // 主色调 - 紫色
                Color.web("#F3E5F5")            // 次色调 - 浅紫
        ));

        // 橙色主题
        themes.put("Orange", new Theme(
                "Orange",
                Color.web("#FFE0B2"),           // 背景颜色 - 浅橙
                Color.web("#F57C00"),           // 菜单栏颜色 - 橙色
                Color.web("#FFFFFF"),           // 菜单文字 - 白色
                Color.web("#FFFFFF"),           // 页面背景 - 白色
                Color.web("#F57C00"),           // 边框色 - 橙色
                Color.web("#F57C00"),           // 主色调 - 橙色
                Color.web("#FFE0B2")            // 次色调 - 浅橙
        ));
    }

    /**
     * 获取主题列表
     */
    public String[] getThemeNames() {
        return themes.keySet().toArray(new String[0]);
    }

    /**
     * 获取指定主题
     */
    public Theme getTheme(String name) {
        return themes.get(name);
    }

    /**
     * 切换主题
     */
    public void switchTheme(String themeName) {
        Theme theme = themes.get(themeName);
        if (theme != null) {
            currentTheme = theme;
            notifyThemeChanged();
        }
    }

    /**
     * 获取当前主题
     */
    public Theme getCurrentTheme() {
        return currentTheme;
    }

    /**
     * 设置主题变化回调
     */
    public void setOnThemeChanged(Runnable callback) {
        this.onThemeChanged = callback;
    }

    /**
     * 通知主题已改变
     */
    private void notifyThemeChanged() {
        if (onThemeChanged != null) {
            onThemeChanged.run();
        }
    }

    /**
     * 生成菜单栏样式字符串
     */
    public String getMenuBarStyle() {
        Theme theme = getCurrentTheme();
        String bgColor = Theme.colorToHex(theme.getMenuBarColor());
        return String.format("-fx-background-color: %s; -fx-text-fill: %s;",
                bgColor, Theme.colorToHex(theme.getMenuTextColor()));
    }

    /**
     * 生成主场景样式字符串
     */
    public String getMainSceneStyle() {
        Theme theme = getCurrentTheme();
        String bgColor = Theme.colorToHex(theme.getBackgroundColor());
        return String.format("-fx-background-color: %s;", bgColor);
    }

    /**
     * 生成页面列表样式字符串
     */
    public String getPageListStyle() {
        Theme theme = getCurrentTheme();
        String bgColor = Theme.colorToHex(theme.getPageBackgroundColor());
        String borderColor = Theme.colorToHex(theme.getBorderColor());
        return String.format("-fx-background-color: %s; -fx-border-color: %s; -fx-border-width: 0 1 0 0;",
                bgColor, borderColor);
    }

    /**
     * 生成页面编辑区样式字符串
     */
    public String getPageEditStyle() {
        Theme theme = getCurrentTheme();
        String bgColor = Theme.colorToHex(theme.getBackgroundColor());
        return String.format("-fx-background-color: %s; -fx-padding: 10;", bgColor);
    }
}

