from __future__ import annotations

import json

from device_gateway.collectors.system import SystemCollector
from device_gateway.protocol import ServerSnapshot


def test_system_collector_ranges_and_protocol_round_trip() -> None:
    collector = SystemCollector()
    first = collector.collect()
    second = collector.collect()

    assert 0 <= second.cpu_percent <= 100
    assert 0 <= second.memory_percent <= 100
    assert 0 <= second.swap_percent <= 100
    assert 0 <= second.disk_percent <= 100
    assert second.memory_used <= second.memory_total
    assert second.disk_used <= second.disk_total
    assert second.network_rx_bps >= 0
    assert second.network_tx_bps >= 0
    assert second.uptime > 0
    assert second.hostname
    assert collector.latest is second
    assert first.type == "server_snapshot"

    encoded = json.dumps(second.model_dump())
    decoded = ServerSnapshot.model_validate_json(encoded)
    assert decoded == second
