"""Tests for filter auto schedule."""

from __future__ import annotations

import unittest
from datetime import datetime
from zoneinfo import ZoneInfo

from control.config import ControlConfig, FilterAutoConfig
from control.filter_policy import evaluate_filter_window, desired_filter_pump
from control.state import ControlState, FsmContext


class TestFilterPolicy(unittest.TestCase):
    def test_midnight_two_hour_window(self) -> None:
        cfg = ControlConfig(
            filter_auto=FilterAutoConfig(start_time="00:00", run_time_hours=2.0, timezone="UTC")
        )
        tz = ZoneInfo("UTC")
        inside = datetime(2026, 10, 19, 1, 0, tzinfo=tz)
        outside = datetime(2026, 10, 19, 3, 0, tzinfo=tz)
        self.assertTrue(evaluate_filter_window(cfg, inside).active)
        self.assertFalse(evaluate_filter_window(cfg, outside).active)

    def test_auto_mode_pump_on_in_window(self) -> None:
        cfg = ControlConfig(
            filter_auto=FilterAutoConfig(start_time="00:00", run_time_hours=2.0, timezone="UTC")
        )
        state = ControlState(filter_mode="auto")
        ctx = FsmContext()
        tz = ZoneInfo("UTC")
        now = datetime(2026, 10, 19, 1, 0, tzinfo=tz)
        pump = desired_filter_pump(state, cfg, ctx, now=now)
        self.assertEqual(pump, "on")
        self.assertTrue(state.filter_window_active)


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