// DragonX Wallet - ImGui Edition
// Copyright 2024-2026 The Hush Developers
// Released under the GPLv3

#pragma once

#include "effects/acrylic.h"
#include "material/color_theme.h"
#include <string>

namespace dragonx {
namespace ui {

// ============================================================================
// Acrylic Theme Presets
// ============================================================================

/**
 * @brief Collection of acrylic parameters for different UI elements
 */
struct AcrylicTheme {
    effects::AcrylicParams sidebar;   // Navigation sidebar
    effects::AcrylicParams popup;     // Dialogs, modals
    effects::AcrylicParams card;      // Cards, panels
    effects::AcrylicParams menu;      // Context menus
    effects::AcrylicParams tooltip;   // Tooltips
};

/**
 * @brief Get the DragonX branded acrylic theme
 */
AcrylicTheme GetDragonXAcrylicTheme();

/**
 * @brief Get the dark acrylic theme
 */
AcrylicTheme GetDarkAcrylicTheme();

/**
 * @brief Get the light acrylic theme
 */
AcrylicTheme GetLightAcrylicTheme();

/**
 * @brief Get acrylic theme matching current ImGui theme
 */
const AcrylicTheme& GetCurrentAcrylicTheme();

/**
 * @brief Set the current acrylic theme
 */
void SetCurrentAcrylicTheme(const AcrylicTheme& theme);

// ============================================================================
// ImGui Theme Functions
// ============================================================================

/**
 * @brief Apply the DragonX Material Design theme
 * 
 * Uses Material Design 2 color system with DragonX red primary color.
 * This is the recommended theme for DragonX wallet.
 */
void SetDragonXMaterialTheme();

/**
 * @brief Apply the DragonX legacy theme (deprecated)
 * 
 * Legacy green-based theme. Use SetDragonXMaterialTheme() instead.
 */
void SetDragonXTheme();

/**
 * @brief Apply dark theme variant (Material Design)
 */
void SetDarkTheme();

/**
 * @brief Apply light theme variant (Material Design)
 */
void SetLightTheme();

/**
 * @brief Apply a theme by its ID (filename stem)
 * 
 * Loads theme from res/themes/{id}.json. Falls back to dragonx theme if not found.
 * @param themeId Theme identifier like "dragonx", "dark", "light", "ocean-blue"
 * @return true if theme was loaded successfully
 */
bool SetThemeById(const std::string& themeId);

} // namespace ui
} // namespace dragonx
