from __future__ import annotations

import os
import pytest

os.environ.setdefault("EXECUTION_BOT_TOKEN", "test-token")
os.environ.setdefault("DECISION_THRESHOLD", "0.3")

from signals.decision import DecisionEngine


def make_engine() -> DecisionEngine:
    return DecisionEngine()


def test_score_above_threshold_is_buy():
    eng = make_engine()
    d = eng.decide("BTCUSDT", 0.5, 2)
    assert d.action == "BUY"


def test_score_below_negative_threshold_is_sell():
    eng = make_engine()
    d = eng.decide("BTCUSDT", -0.5, 2)
    assert d.action == "SELL"


def test_score_within_threshold_is_hold():
    eng = make_engine()
    d = eng.decide("BTCUSDT", 0.1, 1)
    assert d.action == "HOLD"


def test_score_exactly_at_threshold_is_hold():
    """الحد نفسه (0.3) → HOLD (يجب أن يكون أكبر من الحد وليس مساوياً)"""
    eng = make_engine()
    d = eng.decide("BTCUSDT", 0.3, 1)
    assert d.action == "HOLD"


def test_score_just_above_threshold_is_buy():
    eng = make_engine()
    d = eng.decide("BTCUSDT", 0.301, 1)
    assert d.action == "BUY"


def test_decision_contains_correct_metadata():
    eng = make_engine()
    d = eng.decide("ETHUSDT", 0.8, 3)
    assert d.symbol == "ETHUSDT"
    assert d.score == 0.8
    assert d.signal_count == 3
    assert d.decided_at is not None
