# app/src/trading/market_intelligence/common/types.py

from __future__ import annotations

from typing import Any, TypeAlias

from src.core.types import JsonDict, JsonList


# Название торгового инструмента.
# Например: BTC/USD, ETH/USD.
SymbolName: TypeAlias = str


# Название временного интервала.
# Например: 1m, 5m, 15m, 1h.
TimeframeName: TypeAlias = str


# Название движка Market Intelligence.
# Например: trend, momentum, volatility.
EngineName: TypeAlias = str


# Версия движка.
# Нужна для журнала и диагностики, чтобы понимать,
# какая версия логики рассчитала конкретный результат.
EngineVersion: TypeAlias = str


# Код причины.
# Это короткое машинное имя причины, которое удобно хранить в журнале,
# payload и внутренних проверках.
ReasonCode: TypeAlias = str


# Человекочитаемое описание причины.
# Оно должно быть понятно без глубоких знаний трейдинга.
ReasonText: TypeAlias = str


# Оценка от 0 до 100.
# 0 означает очень слабое качество или отсутствие признака.
# 100 означает максимально сильное качество или признак.
ScoreValue: TypeAlias = float


# Уверенность от 0 до 1.
# 0 означает, что движок не уверен в своём выводе.
# 1 означает, что данных достаточно и вывод считается надёжным.
ConfidenceValue: TypeAlias = float


# Вероятность от 0 до 100.
# Используется для оценки вероятности события.
# Например, продолжения движения или изменения направления.
ProbabilityValue: TypeAlias = float


# Вес показателя при сборе общей оценки.
# Чем больше вес, тем сильнее показатель влияет на итоговую оценку.
WeightValue: TypeAlias = float


# Возраст данных или сигнала в секундах.
# Нужен, чтобы понимать, насколько свежий результат использует система.
AgeSeconds: TypeAlias = float


# Длительность выполнения в миллисекундах.
# Нужна для диагностики производительности движков.
DurationMs: TypeAlias = float


# Метрики движка.
# Здесь хранятся измеримые значения: наклон, расстояние, скорость,
# качество движения, возраст сигнала и другие расчётные данные.
MetricsDict: TypeAlias = JsonDict


# Payload движка.
# Это единый диагностический словарь для журнала, событий и отладки.
PayloadDict: TypeAlias = JsonDict


# Дополнительный контекст.
# Используется для редких служебных данных, которые не стоит делать
# отдельными полями базовой модели.
ContextDict: TypeAlias = JsonDict


# Сырые рыночные данные.
# Формат может отличаться в зависимости от источника данных,
# поэтому пока оставляем его универсальным.
MarketData: TypeAlias = JsonDict


# Результаты зависимых движков.
# Ключ — имя движка, значение — его результат или диагностический снимок.
# Пока используется Any, поскольку общий результат Engine
# будет определён позже в models.py.
DependencyResults: TypeAlias = dict[EngineName, Any]


# Список диагностических сообщений.
# Используется там, где один блок может вернуть несколько предупреждений.
DiagnosticMessages: TypeAlias = JsonList


# Универсальное значение для диагностических деталей.
# Например: число, строка, список, словарь или None.
DiagnosticValue: TypeAlias = Any