"""
Unit Tests for Risk Management Engine and Decision Gate
"""
import pytest
from python.intelligence.risk_engine import RiskEngine
from python.intelligence.decision_gate import DecisionGate

def test_risk_reward_acceptable():
    # Entry 100, Stop 90 (10 pts risk), Target 125 (25 pts reward) -> Gross 2.5:1
    res = RiskEngine.calculate_net_risk_reward(
        entry=100.0,
        stop_loss=90.0,
        target_1=125.0,
        slippage_pts=0.5,
        brokerage_per_order=20.0,
        lot_size=25
    )
    assert res["gross_rr"] == 2.5
    # Net RR should be >= 1.5
    assert res["net_rr"] >= 1.5
    assert res["is_acceptable"] is True

def test_risk_reward_unacceptable():
    # Entry 100, Stop 95 (5 pts risk), Target 105 (5 pts reward) -> Gross 1:1
    res = RiskEngine.calculate_net_risk_reward(
        entry=100.0,
        stop_loss=95.0,
        target_1=105.0,
        slippage_pts=0.5,
        brokerage_per_order=20.0,
        lot_size=25
    )
    assert res["is_acceptable"] is False

def test_decision_gate_stale_data():
    res = DecisionGate.evaluate_decision(
        symbol="NSE:NIFTY50-INDEX",
        regime_data={"regime": "STRONG_BULLISH", "confidence_pct": 90.0},
        candidates=[{"strategy_name": "ORB", "action": "BUY_CE", "trigger_price": 24500, "stop_loss": 24450, "target_1": 24650}],
        data_freshness="STALE",
        data_age_sec=300
    )
    assert res["decision"] == "WAIT"
    assert "LOCKED_STALE_DATA" in res["python_validation"]

def test_decision_gate_choppy_regime():
    res = DecisionGate.evaluate_decision(
        symbol="NSE:NIFTY50-INDEX",
        regime_data={"regime": "CHOPPY", "confidence_pct": 85.0},
        candidates=[],
        data_freshness="LIVE",
        data_age_sec=10
    )
    assert res["decision"] == "NO_TRADE"
    assert "REGIME_GUARD_ACTIVATED" in res["python_validation"]
