from __future__ import annotations

from jarvis_gateway.adapters.base import BaseAdapter
from jarvis_gateway.contracts import (
    ActionDescriptor,
    ActionMode,
    DisplayPolicy,
    KpiItem,
    ModuleId,
    ModuleSnapshot,
    ModuleStatus,
    Sensitivity,
    Severity,
    SourceHealth,
    SourceType,
    utcnow,
)


class MockSystemAdapter(BaseAdapter):
    module_id = ModuleId.SYSTEM
    title = "JARVIS System"

    def get_snapshot(self) -> ModuleSnapshot:
        now = utcnow()
        action = ActionDescriptor(label="Open System", href="/system", mode=ActionMode.LINK_ONLY, sensitivity=Sensitivity.INTERNAL, blocked_reason=None, preview_required=False, confirm_required=False, audit_required=False)
        return ModuleSnapshot(
            module_id=ModuleId.SYSTEM,
            title=self.title,
            status=ModuleStatus.OK,
            sensitivity=Sensitivity.INTERNAL,
            display_policy=DisplayPolicy.SUMMARY,
            last_success_at=now,
            last_attempt_at=now,
            stale_after_seconds=300,
            degraded_reason=None,
            source_health=SourceHealth(reachable=True, latency_ms=12, source_type=SourceType.STATIC_CONFIG, version="system-mock-v1", contract_version="jarvis.module_snapshot.v1", last_success_at=now, last_error_redacted=None, stale=False),
            kpis=[
                KpiItem(key="gateway_status", label="Gateway", value="online", unit=None, severity=Severity.SUCCESS, sensitivity=Sensitivity.INTERNAL, display_policy=DisplayPolicy.SUMMARY, help_text="Mock gateway status."),
                KpiItem(key="safety_check", label="Safety", value="available", unit=None, severity=Severity.SUCCESS, sensitivity=Sensitivity.INTERNAL, display_policy=DisplayPolicy.SUMMARY, help_text="Repo safety checks available."),
                KpiItem(key="runtime", label="Runtime", value="read-only", unit=None, severity=Severity.INFO, sensitivity=Sensitivity.INTERNAL, display_policy=DisplayPolicy.SUMMARY, help_text="Operator handoff mode."),
            ],
            attention_items=[],
            links=[action],
            primary_action=action,
            contract_version="jarvis.module_snapshot.v1",
        )
