from __future__ import annotations

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


class MockFinanceAdapter(BaseAdapter):
    module_id = ModuleId.FINANCE
    title = "FinanceManager"

    def get_snapshot(self) -> ModuleSnapshot:
        now = utcnow()
        action = ActionDescriptor(
            label="Open Finance",
            href="/finance",
            mode=ActionMode.LINK_ONLY,
            sensitivity=Sensitivity.SENSITIVE,
            blocked_reason=None,
            preview_required=False,
            confirm_required=False,
            audit_required=False,
        )
        attention = AttentionItem(
            id="att_finance_reviews_demo",
            module_id=ModuleId.FINANCE,
            title="Finance reviews pending",
            message="4 finance review items need attention.",
            severity=Severity.WARNING,
            sensitivity=Sensitivity.SENSITIVE,
            created_at=now,
            action=action,
            dedupe_key="finance.review_count",
        )
        return ModuleSnapshot(
            module_id=ModuleId.FINANCE,
            title=self.title,
            status=ModuleStatus.ATTENTION,
            sensitivity=Sensitivity.SENSITIVE,
            display_policy=DisplayPolicy.SUMMARY,
            last_success_at=now,
            last_attempt_at=now,
            stale_after_seconds=900,
            degraded_reason=None,
            source_health=SourceHealth(
                reachable=True,
                latency_ms=42,
                source_type=SourceType.MOCK,
                version="finance-mock-v1",
                contract_version="jarvis.module_snapshot.v1",
                last_success_at=now,
                last_error_redacted=None,
                stale=False,
            ),
            kpis=[
                KpiItem(key="api_status", label="API", value="online", unit=None, severity=Severity.SUCCESS, sensitivity=Sensitivity.INTERNAL, display_policy=DisplayPolicy.SUMMARY, help_text=None),
                KpiItem(key="review_count", label="Reviews", value=4, unit="items", severity=Severity.WARNING, sensitivity=Sensitivity.SENSITIVE, display_policy=DisplayPolicy.SUMMARY, help_text="Count only."),
                KpiItem(key="provider_status", label="Providers", value="attention", unit=None, severity=Severity.WARNING, sensitivity=Sensitivity.INTERNAL, display_policy=DisplayPolicy.SUMMARY, help_text="Summary state only."),
            ],
            attention_items=[attention],
            links=[action],
            primary_action=action,
            contract_version="jarvis.module_snapshot.v1",
        )
