import sys
from types import SimpleNamespace

import pytest

pytest.importorskip("flask")

import pymysql


class _DummyCursor:
    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc, tb):
        return False

    def execute(self, *args, **kwargs):
        return None

    def fetchall(self):
        return []

    def fetchone(self):
        return None

    @property
    def rowcount(self):
        return 0


class _DummyConnection:
    def cursor(self):
        return _DummyCursor()

    def close(self):
        return None

    def commit(self):
        return None


def _fake_connect(*args, **kwargs):
    return _DummyConnection()


pymysql.connect = _fake_connect
sys.modules["pymysql"] = pymysql
sys.modules.setdefault("pymysql.converters", SimpleNamespace(escape_string=lambda value: value))

from pipelet_dashboard import MAX_COMPARE_WALLBOXES, app


def _translate(text: str, **kwargs: object) -> str:
    try:
        return text.format(**kwargs)
    except Exception:
        return text


def _render_dashboard_template(**context: object) -> str:
    with app.app_context():
        with app.test_request_context("/op_dashboard"):
            app.jinja_env.globals.setdefault("_", _translate)
            template = app.jinja_env.get_template("op_dashboard.html")
            return template.render(**context)


def test_dashboard_uses_normalized_station_id_for_durations() -> None:
    context = {
        "rows": [
            {
                "source_url": "/ocpp16/STATION-1",
                "ws_url": "",
                "last_connected": None,
                "reconnect_count": 0,
                "location_name": "",
                "comment": "",
                "location_link": "",
                "load_management_remote_access_url": None,
            }
        ],
        "available_languages": {},
        "current_language": "en",
        "PROXY_BASE_WS": "",
        "PROXY_BASE_URL": "",
        "durations": {"STATION-1": "01:02:03"},
        "reconnects": {},
        "qualities": {},
        "entries": 0,
        "connected_evse": 0,
        "broker_status": {"reachable": False, "api_reachable": False},
        "marked_wallboxes": [],
        "summary": {
            "connected": 0,
            "total": 0,
            "availability_pct": 0.0,
            "marked": 0,
            "longest": {"station_id": "-", "duration": ""},
            "shortest": {"station_id": "-", "duration": ""},
        },
        "marked_station_ids": set(),
        "highlighted_station_ids": set(),
        "station_card_anchors": {},
        "station_normalized_lookup": {"STATION-1": "STATION-1"},
        "station_charge_states": {},
        "ocpp_versions": {},
        "max_compare_wallboxes": MAX_COMPARE_WALLBOXES,
        "show_proxy_errors": False,
    }

    rendered = _render_dashboard_template(**context)

    assert "01:02:03" in rendered
