# /modules/theming.py

"""
Módulo para centralizar la identidad de marca y el tema visual de la aplicación.

Este archivo contiene:
- Paletas de colores de la marca.
- Definiciones de familias tipográficas.
- Una función para aplicar un tema consistente a las figuras de Plotly.
"""

import plotly.graph_objects as go

# ===============================================================================
# 1) IDENTIDAD DE MARCA (COLORES Y TIPOGRAFÍA)
# ===============================================================================
COLORS = {
    "brown":       "#8B4513",
    "gold":        "#FD6A02",
    "white":       "#FFFFFF",
    "darkslate":   "#2F4F4F",
    "beige":       "#F5F5DC",
    "black":       "#000000",
    "light_brown": "#C19A6B",
    "dark_red":    "#8B0000",
}

# Paleta de colores exclusiva para gráficos
PICTON_BLUE = [
    "#eff8ff", "#dff0ff", "#b8e3ff", "#78cdff", "#38b6ff",
    "#069af1", "#007ace", "#0061a7", "#02528a", "#084572", "#062b4b"
]

# Fuentes de la marca
TITLE_FONT = "Playfair Display, serif"
BODY_FONT  = "Lato, sans-serif"
ALT_FONT   = "Montserrat, sans-serif"

# ===============================================================================
# 2) TEMA PLOTLY (APLICA SOLO A GRÁFICAS)
# ===============================================================================
def apply_cabanna_theme(fig: go.Figure) -> go.Figure:
    """
    Aplica un tema visual consistente a una figura de Plotly.

    Utiliza un fondo oscuro, tipografías de marca y ajusta márgenes y leyendas
    para una apariencia profesional y alineada con la identidad de Cabanna.

    Args:
        fig (go.Figure): La figura de Plotly a la que se aplicará el tema.

    Returns:
        go.Figure: La figura modificada con el tema aplicado.
    """
    layout_updates = dict(
        font=dict(family=BODY_FONT, size=13, color=COLORS["white"]),
        paper_bgcolor=COLORS["black"],
        plot_bgcolor=COLORS["black"],
        margin=dict(l=10, r=10, t=60, b=10),
        legend=dict(
            title=None, 
            orientation="h",
            yanchor="bottom", y=1.02, 
            xanchor="left", x=0,
            font=dict(color=PICTON_BLUE[4])
        ),
    )
    fig.update_layout(**layout_updates)
    return fig