# -*- coding: utf-8 -*-
"""Палитра и шрифты окна — те же, что на сайте.

Программа и сайт должны выглядеть одним продуктом. Цвета взяты один в один из
`api/templates/_style.html`: кремовая основа, сакура — акцент, сирень — второй
голос, мята и коралл только для состояний.

Тёмная тема была раньше и осталась в истории: она читалась как «утилита для
своих», а пользоваться этим будет человек, который видит компьютер впервые.

Ключи специально сохранены прежними — весь остальной код продолжает работать
без правок, меняются только значения.
"""
from __future__ import annotations

# ── сырые цвета сайта ───────────────────────────────────────────────────────
CREAM = "#FFF8F3"
CREAM_2 = "#FFF1E7"
WHITE = "#FFFFFF"

SAKURA = "#FF7BA9"
SAKURA_D = "#E8558C"
SAKURA_L = "#FFE7F0"

LILAC = "#8B7FE8"
LILAC_D = "#6F62D6"
LILAC_L = "#EEEBFF"

GOLD = "#FFC65C"
GOLD_L = "#FFF4DE"

MINT = "#2FBF95"
MINT_D = "#26A17E"
MINT_L = "#DDF7EE"

CORAL = "#F2685C"
CORAL_D = "#DB5348"
CORAL_L = "#FFE9E6"

INK = "#3B2E50"
INK_2 = "#655878"
MUTED = "#9C90B0"
LINE = "#F3E7EF"
LINE_2 = "#EADCE7"

COLORS = {
    "bg": CREAM,
    "surface": WHITE,
    "surface2": CREAM_2,
    "border": LINE_2,
    "text": INK,
    "muted": INK_2,
    # Главное действие — сакура. Она же на кнопках сайта.
    "accent": SAKURA,
    "accent_hover": SAKURA_D,
    "info": LILAC,
    "info_hover": LILAC_D,
    "warn": GOLD,
    "warn_hover": "#F0B23F",
    "danger": CORAL,
    "danger_hover": CORAL_D,
    # Цвета текста для состояний. Пастельные с сайта хороши в заголовке на
    # экране, но на кремовом фоне в мелком шрифте мятный и золотой текст
    # выцветают: у прежних #1E8A67 и #A9741A контраст 4.3 и 4.0 — ниже порога
    # читаемости. Здесь взяты те же цвета, но в тёмных тонах, 5.5–5.9.
    # Сакура хороша как заливка, но как текст на кремовом даёт 2.4 — заголовок
    # экрана «Закрываю» на ней плыл. Для текста — тон глубже.
    "accent_fg": "#D6377A",
    "ok_fg": "#12735A",
    "warn_fg": "#8A5A0B",
    "bad_fg": "#C0392E",
    "info_fg": "#5B4EC6",
    # Мягкие подложки под строку состояния.
    "ok_bg": MINT_L,
    "warn_bg": GOLD_L,
    "bad_bg": CORAL_L,
    "info_bg": LILAC_L,
    # Неактивная кнопка: видно, что она есть, и видно, что нажать нельзя.
    "disabled": "#ECE5EE",
    "disabled_fg": "#7C7189",
}

# ── кнопки ──────────────────────────────────────────────────────────────────
# Кнопки собраны здесь, а не рассыпаны по вызовам configure(). Так вышло, что
# «Выключить защиту» красили в surface2 (#FFF1E7) поверх фона окна (#FFF8F3) —
# разница 1.05, кнопки на экране просто не было. А белый текст на сакуре с
# сайта даёт 2.4: издали читается, вблизи размывается.
#
# Каждый стиль — заливка, наведение, текст и рамка. Рамка обязательна: на
# кремовом фоне любая светлая заливка сама по себе теряет края.
BUTTONS = {
    # Главное действие. Сакура на тон глубже сайтовой: белый текст 4.5.
    "primary": {"fg": "#D6377A", "hover": "#B92C63", "text": "#FFFFFF", "border": "#B92C63"},
    # Второе по важности — сирень (применить, скачать).
    "info": {"fg": "#6F62D6", "hover": "#5B4EC6", "text": "#FFFFFF", "border": "#5B4EC6"},
    # Спокойное действие рядом с главным.
    #
    # Первый заход был слишком робким: заливка отличалась от белой карточки на
    # 1.26, а рамка — на 1.7. На кремовом фоне это ещё держалось, а в окне
    # активации, где карточка белая, кнопка «Вставить» сливалась с ней. Держим
    # рамку не бледнее 2.3 к обоим фонам — она и делает кнопку кнопкой.
    "soft": {"fg": "#DCD5F5", "hover": "#CCC2F0", "text": "#3E3477", "border": "#A99BE8"},
    # Выключить, отменить: коралл, но мягкий — это не катастрофа.
    "danger": {"fg": "#FFDDD7", "hover": "#FFCCC3", "text": "#A33326", "border": "#EFA79B"},
    # Служебное: перезапустить программу, закрыть.
    "quiet": {"fg": "#EAE2EE", "hover": "#DFD4E4", "text": "#4B4059", "border": "#C3B5CC"},
    # Идёт работа. Раньше здесь стоял #30363d из тёмной темы — тёмное пятно.
    "busy": {"fg": "#FFEBCB", "hover": "#FFEBCB", "text": "#8A5A0B", "border": "#E5C489"},
    # Нажать нельзя: текст приглушён намеренно, но всё ещё читается (4.2).
    "off": {"fg": "#E6DEEA", "hover": "#E6DEEA", "text": "#6F6480", "border": "#C6B9CE"},
}

# Значок на кнопке говорит о состоянии быстрее подписи. Взяты только
# BMP-символы: Tk не умеет рисовать эмодзи за пределами первой плоскости, а
# эти есть в Segoe UI на любой Windows — проверено рендером.
ICONS = {
    "start": "▶",
    "apply": "↻",
    "restart": "↻",
    "stop": "⏹",
    "download": "↓",
    "busy": "⌛",
    "blocked": "⊘",
    "settings": "⚙",
    "close": "✕",
    "copy": "⧉",
    "ok": "✓",
    "warn": "⚠",
    "back": "←",
}


def label(icon: str | None, text: str) -> str:
    """Подпись кнопки со значком. Два пробела — чтобы значок не липнул к слову."""
    glyph = ICONS.get(icon or "", "")
    return f"{glyph}  {text}" if glyph else text

# Comfortaa и Nunito с сайта в Windows не входят, а ставить шрифты ради окна —
# лишний риск на чужой машине. Segoe UI есть везде начиная с Windows 10 и в
# нужных начертаниях выглядит так же мягко.
FONTS = {
    "brand": ("Segoe UI Semibold", 18),
    "title": ("Segoe UI Semibold", 13),
    "body": ("Segoe UI", 12),
    "small": ("Segoe UI", 10),
    "button": ("Segoe UI Semibold", 13),
    "button_sm": ("Segoe UI Semibold", 11),
    "state": ("Segoe UI Semibold", 15),
}
