"""Tests for Prometheus Node Exporter target discovery."""

from pathlib import Path

import pytest

from media_library_viewer_api.services.settings_store import SettingsStore
from media_library_viewer_api.services.targets import build_node_exporter_targets


@pytest.fixture
def store(tmp_path: Path) -> SettingsStore:
    db = SettingsStore(tmp_path / "settings.sqlite")
    db.init_schema()
    return db


class TestBuildNodeExporterTargets:
    def test_disabled_machine_excluded(self, store: SettingsStore):
        store.upsert_machine(
            {
                "name": "remote1",
                "mode": "ssh",
                "host": "10.0.0.5",
                "username": "u",
                "node_exporter_enabled": False,
                "node_exporter_port": 9200,
            }
        )
        assert build_node_exporter_targets(store) == []

    def test_ssh_enabled_machine_included(self, store: SettingsStore):
        machine = store.upsert_machine(
            {
                "name": "remote1",
                "mode": "ssh",
                "host": "10.0.0.5",
                "username": "u",
                "node_exporter_enabled": True,
                "node_exporter_port": 9200,
                "node_exporter_scrape_host": "1.2.3.4",
            }
        )
        targets = build_node_exporter_targets(store)
        assert len(targets) == 1
        assert targets[0]["targets"] == ["1.2.3.4:9200"]
        assert targets[0]["labels"]["machine_id"] == machine["id"]
        assert targets[0]["labels"]["machine_name"] == "remote1"
        assert targets[0]["labels"]["job"] == "node-exporter-remote"

    def test_scrape_host_defaults_to_machine_host(self, store: SettingsStore):
        store.upsert_machine(
            {
                "name": "remote2",
                "mode": "ssh",
                "host": "remote2.example.com",
                "username": "u",
                "node_exporter_enabled": True,
                "node_exporter_port": 9100,
            }
        )
        targets = build_node_exporter_targets(store)
        assert targets[0]["targets"] == ["remote2.example.com:9100"]

    def test_local_machine_excluded(self, store: SettingsStore):
        store.upsert_machine(
            {
                "name": "This machine",
                "mode": "local",
                "host": "localhost",
                "username": "",
                "node_exporter_enabled": True,
            }
        )
        assert build_node_exporter_targets(store) == []

    def test_missing_host_excluded(self, store: SettingsStore):
        store.upsert_machine(
            {
                "name": "remote3",
                "mode": "ssh",
                "host": "",
                "username": "u",
                "node_exporter_enabled": True,
            }
        )
        assert build_node_exporter_targets(store) == []
