import pandas as pd

import tools.run_mlp_score_structure_experiment as experiment


def test_wfo_requires_the_canonical_minimum_number_of_valid_folds(monkeypatch):
    def one_valid_fold(_signals, start, _end=None):
        return {"Total Trades": 10 if start == "2021-01-01" else 0, "Calmar Ratio": 1.5}

    monkeypatch.setattr(experiment, "_metrics", one_valid_fold)

    mean, minimum, count, eligible = experiment._wfo(pd.DataFrame())

    assert (mean, minimum, count, eligible) == (0.0, -99.0, 1, False)


def test_summary_normalizes_a_zero_trade_oos_sentinel(monkeypatch):
    def metrics(_signals, start, _end=None):
        if start == experiment.OOS_START:
            return {"Total Trades": 0, "Calmar Ratio": -10.0, "Total P&L %": 12.0}
        return {"Total Trades": 20, "Calmar Ratio": 1.0, "Total P&L %": 100.0, "Max Drawdown %": -10.0}

    monkeypatch.setattr(experiment, "_metrics", metrics)
    monkeypatch.setattr(experiment, "_wfo", lambda _signals: (1.0, 0.5, 2, True))

    summary = experiment._summary("test", pd.DataFrame({"time": pd.to_datetime(["2020-01-01"])}))

    assert summary["oos_calmar"] == 0.0
    assert summary["oos_pnl_pct"] == 0.0
    assert summary["wfo_eligible"] is True
