"""Top-level pytest fixtures.

Heavy fixtures (Postgres bring-up, ArduPilot SITL, Derkachi corpus mount) are added
incrementally by the components that need them. AZ-263 ships only the smoke-level
scaffolding.

Tier-2-only tests are guarded by `pytest.mark.tier2` and auto-skipped on Tier-1.
"""

from __future__ import annotations

import os
from collections.abc import Iterator

import pytest

from gps_denied_onboard.fdr_client.fakes import FakeFdrSink


def pytest_collection_modifyitems(config: pytest.Config, items: list[pytest.Item]) -> None:
    """Auto-skip `tier2` tests when GPS_DENIED_TIER != 2."""
    if os.environ.get("GPS_DENIED_TIER") == "2":
        return
    skip_tier2 = pytest.mark.skip(reason="Tier-2-only test; set GPS_DENIED_TIER=2 to run")
    skip_gpu = pytest.mark.skip(reason="GPU-only test")
    skip_docker = pytest.mark.skip(reason="Requires Docker compose services")
    for item in items:
        if "tier2" in item.keywords:
            item.add_marker(skip_tier2)
        if "gpu" in item.keywords:
            item.add_marker(skip_gpu)
        if "docker" in item.keywords:
            item.add_marker(skip_docker)


@pytest.fixture
def fake_fdr_sink() -> Iterator[FakeFdrSink]:
    """Default-configuration FakeFdrSink with overrun policy disabled (AZ-275 AC-5)."""
    sink = FakeFdrSink(producer_id="test.producer")
    yield sink
    sink.flush()
