#[path = "style_access.rs"]
mod access;
#[path = "style_apply.rs"]
mod apply;
#[path = "style_state_patch.rs"]
mod state_patch;

use bevy::prelude::*;

pub use crate::theme_config::{
    BorderConfig, ButtonConfig, CheckboxConfig, ControlConfig, FieldConfig, FontConfig,
    InputConfig, InteractionConfig, PanelConfig, PopupConfig, RadiusConfig, ResponsiveConfig,
    SelectConfig, SliderConfig, SpacingConfig, StatePaletteConfig,
    SurfaceConfig as UiSurfaceConfig, TextConfig, ThemeColor, ThemeTokensConfig, TileConfig,
    TypographyConfig, UiThemeConfig,
};
pub use access::{
    button_theme, control_interaction_theme, control_radius, divider_width, emphasis_border,
    emphasis_border_width, focus_outline_width, font_size_body, font_size_control,
    font_size_control_compact, font_size_display, font_size_hint, font_size_meta,
    font_size_title, form_item_compact_width, input_caret_color, input_caret_width,
    input_selection_color, merge_classes, mono_font_asset_path, panel_radius,
    panel_surface_background, pill_radius, prompt_shadow, prompt_surface_background,
    regular_border, regular_border_width, resolve_class_patch, resolve_class_patch_or_empty,
    resolve_classes_with_fallback, resolve_color_value, resolve_color_value_with_config,
    sans_font_asset_path, scrollbar_width, serif_font_asset_path, subtle_surface_background,
    tab_active_text_color, tab_border, tab_border_width, text_disabled_color,
    text_placeholder_color, text_primary_color, text_secondary_color, checkbox_border_color,
    checkbox_indicator_color, ui_focus_outline_color, ui_focus_outline_hover_color,
    ui_hover_outline_color, ui_theme,
};
pub use apply::apply_utility_patch;
pub use state_patch::{
    root_visual_styles_from_patch, text_visual_styles_from_patch, token_border_style,
};

#[derive(Debug, Clone, Copy)]
pub struct InteractionVisualTheme {
    pub hover_outline: Color,
    pub focus_outline: Color,
    pub focus_hover_outline: Color,
}

#[derive(Debug, Clone, Copy)]
pub struct InteractionStatePalette {
    pub idle: Color,
    pub hover: Color,
    pub active: Color,
    pub active_hover: Color,
    pub disabled: Color,
}

#[derive(Debug, Clone, Copy)]
pub struct ButtonTheme {
    pub background: InteractionStatePalette,
    pub border: InteractionStatePalette,
    pub text: InteractionStatePalette,
}
