"use client";
import { useEffect, useState } from "react";
type ExecutiveSnapshot = {
revenue: { actual: number; forecast: number; variance_percent: number; pipeline_value: number; win_rate: number };
approvals: { pending: number; warning: number; breach: number };
connectors: { healthy: number; degraded: number; error: number };
compliance: { compliant: number; partial: number; non_compliant: number; posture: string };
contradictions: { active: number; critical: number };
strategic_deals: { active: number; pipeline_value: number };
evidence_packs: { ready: number; pending_review: number };
};
function MetricCard({ label, labelAr, value, status }: { label: string; labelAr: string; value: string | number; status?: string }) {
const color = status === "danger" ? "text-red-500" : status === "warning" ? "text-yellow-500" : "text-emerald-500";
return (
{labelAr}
{label}
{value}
);
}
export function ExecutiveRoom() {
const [snapshot, setSnapshot] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
const fetchSnapshot = async () => {
try {
const apiUrl = process.env.NEXT_PUBLIC_API_URL || "http://localhost:8000";
const res = await fetch(`${apiUrl}/api/v1/executive-room/snapshot`);
if (res.ok) setSnapshot(await res.json());
} catch { /* silent */ }
setLoading(false);
};
fetchSnapshot();
const interval = setInterval(fetchSnapshot, 30000);
return () => clearInterval(interval);
}, []);
if (loading) return جارٍ التحميل...
;
const s = snapshot || {
revenue: { actual: 0, forecast: 0, variance_percent: 0, pipeline_value: 0, win_rate: 0 },
approvals: { pending: 0, warning: 0, breach: 0 },
connectors: { healthy: 0, degraded: 0, error: 0 },
compliance: { compliant: 0, partial: 0, non_compliant: 0, posture: "unknown" },
contradictions: { active: 0, critical: 0 },
strategic_deals: { active: 0, pipeline_value: 0 },
evidence_packs: { ready: 0, pending_review: 0 },
};
return (
غرفة القيادة التنفيذية
Executive Room — نظرة شاملة على كل ما يحتاجه القائد التنفيذي
{/* Revenue */}
{/* Approvals & Compliance */}
الموافقات | Approvals
10 ? "warning" : undefined} />
0 ? "warning" : undefined} />
0 ? "danger" : undefined} />
الامتثال | Compliance
0 ? "warning" : undefined} />
0 ? "danger" : undefined} />
{/* Connectors & Contradictions */}
الموصلات | Connectors
سليمة{s.connectors.healthy}
متراجعة{s.connectors.degraded}
معطلة{s.connectors.error}
التناقضات | Contradictions
نشطة{s.contradictions.active}
حرجة{s.contradictions.critical}
الصفقات الاستراتيجية | Strategic Deals
نشطة{s.strategic_deals.active}
قيمة الأنبوب{s.strategic_deals.pipeline_value.toLocaleString()} SAR
);
}