# app/src/trading/journal/filters.py

from __future__ import annotations

from dataclasses import dataclass


@dataclass(frozen=True, slots=True)
class JournalExportFilter:
    # key используется в callback_data и имени файла
    key: str

    # label показываем в UI и metadata экспорта
    label: str

    # description можно использовать позже в UI/подсказках
    description: str


JOURNAL_EXPORT_FILTERS: dict[str, JournalExportFilter] = {
    "all": JournalExportFilter(
        key="all",
        label="Всё",
        description="Все записи журнала.",
    ),
    "auto": JournalExportFilter(
        key="auto",
        label="Автоторговля",
        description="События автоторговли, сигналов, execution и runtime.",
    ),
    "trades": JournalExportFilter(
        key="trades",
        label="Сделки",
        description="Открытия, закрытия, flip и trade-события.",
    ),
    "errors": JournalExportFilter(
        key="errors",
        label="Ошибки",
        description="ERROR, CRITICAL и важные WARNING.",
    ),
    "not_auto": JournalExportFilter(
        key="not_auto",
        label="Без авто",
        description="Все записи, кроме автоторговли.",
    ),
}


def normalize_journal_export_filter(value: str | None) -> str:
    # Защита от неизвестных callback_data.
    key = str(value or "all").strip().lower()

    if key in JOURNAL_EXPORT_FILTERS:
        return key

    return "all"


def get_journal_export_filter(value: str | None) -> JournalExportFilter:
    return JOURNAL_EXPORT_FILTERS[normalize_journal_export_filter(value)]


def journal_export_filter_label(value: str | None) -> str:
    return get_journal_export_filter(value).label