from pathlib import Path


def test_odp_mapping_has_map_picker_and_coordinate_guardrails():
    template = (Path(__file__).parents[1] / "app" / "templates" / "odps.html").read_text(encoding="utf-8")
    assert "leaflet@1.9.4" in template
    assert 'id="odp-map"' in template
    assert 'id="odp-latitude"' in template and 'readonly' in template
    assert 'id="odp-longitude"' in template
    assert 'id="save-odp" disabled' in template
    assert "ODP akan langsung tersedia di form PSB" in template


def test_coordinate_validation_accepts_valid_ranges_and_rejects_invalid():
    import sys
    sys.path.insert(0, str(Path(__file__).parents[1]))
    from fastapi import HTTPException
    from app.routes.ops import _coordinate

    assert _coordinate("0.79065", "Latitude", -90, 90) == "0.7906500"
    try:
        _coordinate("91", "Latitude", -90, 90)
    except HTTPException as exc:
        assert exc.status_code == 422
    else:
        raise AssertionError("invalid latitude was accepted")


def test_ops_routes_are_registered():
    import sys
    sys.path.insert(0, str(Path(__file__).parents[1]))
    from main import app

    paths = set(app.openapi()["paths"])
    assert "/odps" in paths
    assert "/audit" in paths
    assert "/backup" in paths
    assert "/export/customers.csv" in paths
    assert "/export/vouchers.csv" in paths
    assert "/export/customers.pdf" in paths
