# shared/branding/branding.py
from __future__ import annotations
from pathlib import Path
import json

BASE_DIR = Path(__file__).resolve().parent

def _load_json(name: str) -> dict:
    path = BASE_DIR / name
    with path.open("r", encoding="utf-8") as f:
        return json.load(f)

BRAND_COLORS = _load_json("brand_colors.json")
TYPOGRAPHY   = _load_json("typography.json")


def get_color(section: str, key: str, default: str | None = None) -> str | None:
    """
    Ejemplo:
      get_color("brand", "blue600")
      get_color("apps", "wp_invoices")
    """
    return BRAND_COLORS.get(section, {}).get(key, default)


def primary_font_stack() -> str:
    key = TYPOGRAPHY["usage"]["body"]
    return TYPOGRAPHY[key]["css_stack"]


def heading_font_stack() -> str:
    key = TYPOGRAPHY["usage"]["headings"]
    return TYPOGRAPHY[key]["css_stack"]


def app_logo_path(app_key: str) -> Path:
    """
    Devuelve la ruta absoluta del logo de una app.
    Ej: app_logo_path("wp_invoices")
    """
    filename = f"{app_key}.png"
    return BASE_DIR / "app_logos" / filename


def main_logo_path() -> Path:
    return BASE_DIR / "logo" / "logo.png"

# shared/branding/branding.py

def get_mail_theme() -> dict:
    """
    Devuelve un diccionario con colores y fuentes para emails del bot.
    Usa brand_colors.json y typography.json, con defaults seguros.
    """
    brand_blue   = get_color("brand", "blue600", "#0b3b73")
    page_bg      = get_color("email", "page_bg", "#020918")
    card_bg      = get_color("email", "card_bg", "#071429")
    border_color = get_color("email", "border", "#122647")
    stat_bg      = get_color("email", "stat_bg", "#081937")
    table_header = get_color("email", "table_header_bg", "#0d2142")
    tag_bg       = get_color("email", "tag_bg", "#132750")
    tag_text     = get_color("email", "tag_text", "#c3d1ff")

    text_primary   = get_color("text", "primary", "#f5f7fb")
    text_secondary = get_color("text", "muted", "#9ba4c4")
    success        = get_color("semantic", "success", "#1fbf75")
    error          = get_color("semantic", "error", "#f04444")

    return {
        "font_stack":      primary_font_stack(),
        "page_bg":         page_bg,
        "card_bg":         card_bg,
        "border_color":    border_color,
        "brand_color":     brand_blue,
        "text_color":      text_primary,
        "secondary_text":  text_secondary,
        "success_color":   success,
        "error_color":     error,
        "stat_bg":         stat_bg,
        "table_header_bg": table_header,
        "tag_bg":          tag_bg,
        "tag_text":        tag_text,
    }

