from __future__ import annotations

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


class MockAutoShortsAdapter(BaseAdapter):
    module_id = ModuleId.AUTOSHORTS
    title = "AutoShorts"

    def get_snapshot(self) -> ModuleSnapshot:
        now = utcnow()
        action = ActionDescriptor(label="Open AutoShorts", href="/autoshorts", mode=ActionMode.LINK_ONLY, sensitivity=Sensitivity.INTERNAL, blocked_reason=None, preview_required=False, confirm_required=False, audit_required=False)
        confirm_blocked = ActionDescriptor(label="Confirm package", href=None, mode=ActionMode.BLOCKED_IN_MVP, sensitivity=Sensitivity.INTERNAL, blocked_reason="Confirm flows are disabled in MVP.", preview_required=False, confirm_required=False, audit_required=False)
        preview = ActionDescriptor(label="Preview package", href="/autoshorts/preview/demo", mode=ActionMode.READ_ONLY, sensitivity=Sensitivity.INTERNAL, blocked_reason=None, preview_required=False, confirm_required=False, audit_required=False)
        approvals = [
            ApprovalItem(id="approval_demo_1", module_id=ModuleId.AUTOSHORTS, title="Synthetic concept review", status="pending", severity=Severity.WARNING, sensitivity=Sensitivity.INTERNAL, requested_at=now, preview_action=preview, confirm_action=confirm_blocked),
            ApprovalItem(id="approval_demo_2", module_id=ModuleId.AUTOSHORTS, title="Synthetic upload review", status="blocked", severity=Severity.INFO, sensitivity=Sensitivity.INTERNAL, requested_at=now, preview_action=preview, confirm_action=confirm_blocked),
        ]
        attention = AttentionItem(id="att_autoshorts_approval_demo", module_id=ModuleId.AUTOSHORTS, title="Approval pending", message="Synthetic package requires review.", severity=Severity.WARNING, sensitivity=Sensitivity.INTERNAL, created_at=now, action=action, dedupe_key="autoshorts.approval")
        return ModuleSnapshot(
            module_id=ModuleId.AUTOSHORTS,
            title=self.title,
            status=ModuleStatus.ATTENTION,
            sensitivity=Sensitivity.INTERNAL,
            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=35, source_type=SourceType.MOCK, version="autoshorts-mock-v1", contract_version="jarvis.module_snapshot.v1", last_success_at=now, last_error_redacted=None, stale=False),
            kpis=[
                KpiItem(key="review_packages", label="Review packages", value=2, unit="items", severity=Severity.WARNING, sensitivity=Sensitivity.INTERNAL, display_policy=DisplayPolicy.SUMMARY, help_text="Synthetic count."),
                KpiItem(key="upload_requests", label="Upload requests", value=1, unit="items", severity=Severity.INFO, sensitivity=Sensitivity.INTERNAL, display_policy=DisplayPolicy.SUMMARY, help_text="Requests only; uploads blocked."),
                KpiItem(key="queue_status", label="Queue", value="attention", unit=None, severity=Severity.WARNING, sensitivity=Sensitivity.INTERNAL, display_policy=DisplayPolicy.SUMMARY, help_text="Synthetic state."),
            ],
            attention_items=[attention],
            links=[action],
            primary_action=action,
            contract_version="jarvis.module_snapshot.v1",
            approval_items=approvals,
        )
