import sqlite3
import sys
import tempfile
import unittest
from pathlib import Path


SCRIPTS_DIR = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(SCRIPTS_DIR))

import forward_compare  # noqa: E402


class ForwardCompareTest(unittest.TestCase):
    def test_normalize_since_accepts_t_and_timezone(self):
        self.assertEqual(
            forward_compare.normalize_since("2026-07-11T15:40:00Z"),
            "2026-07-11 15:40:00.000000",
        )
        self.assertEqual(
            forward_compare.normalize_since("2026-07-11T17:40:00+02:00"),
            "2026-07-11 15:40:00.000000",
        )

    def test_summarize_reports_carried_in_exposure_separately(self):
        with tempfile.NamedTemporaryFile(suffix=".sqlite") as handle:
            con = sqlite3.connect(handle.name)
            con.execute(
                """
                CREATE TABLE trades (
                    pair TEXT, is_short INTEGER, is_open INTEGER,
                    open_date TEXT, close_date TEXT, close_profit REAL,
                    close_profit_abs REAL, exit_reason TEXT
                )
                """
            )
            con.executemany(
                "INSERT INTO trades VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
                [
                    (
                        "BNB/USDT:USDT", 1, 1, "2026-07-08 02:05:00", None,
                        None, None, None,
                    ),
                    (
                        "BTC/USDT:USDT", 1, 0, "2026-07-11 15:40:00",
                        "2026-07-14 04:36:00", 0.04, 6.5,
                        "stoploss_on_exchange",
                    ),
                    (
                        "EDGE/USDT:USDT", 1, 0, "2026-07-14 18:20:00",
                        "2026-07-14 21:52:00", 0.02, 2.5,
                        "trailing_stop_loss",
                    ),
                ],
            )
            con.commit()
            con.close()

            summary = forward_compare.summarize(
                handle.name, "2026-07-11 22:50:00.000000"
            )

        self.assertEqual(summary["signals"], 1)
        self.assertEqual(summary["carried_in"], 2)
        self.assertEqual(summary["carried_in_short"], 2)
        self.assertEqual(summary["carried_in_net_usdt"], 6.5)
        self.assertEqual(
            summary["carried_in_pairs"],
            ["BNB/USDT:USDT:short", "BTC/USDT:USDT:short"],
        )


if __name__ == "__main__":
    unittest.main()
