import { redirect } from "next/navigation" import { and, desc, eq } from "drizzle-orm" import { db } from "@/lib/db" import { ai_recommendations, activity_log } from "@/lib/db/schema" import { getSessionUser } from "@/lib/session" import { ImpactClient } from "./impact-client" export const metadata = { title: "AI Impact" } export default async function ImpactPage() { const user = await getSessionUser() if (!user) redirect("/login") const [recs, activityRows] = await Promise.all([ db .select() .from(ai_recommendations) .where(eq(ai_recommendations.user_id, user.id)), db .select() .from(activity_log) .where(and(eq(activity_log.user_id, user.id), eq(activity_log.type, "ai_action"))) .orderBy(desc(activity_log.created_at)) .limit(20), ]) const all = recs ?? [] const approved = all.filter((r) => r.status === "approved") const dismissed = all.filter((r) => r.status === "dismissed") let totalRevenue = 0 let totalSavings = 0 let totalRiskPrevented = 0 for (const r of approved) { const val = Number(r.action_data?.estimated_value ?? 0) const vtype = r.action_data?.value_type ?? "revenue" if (vtype === "revenue") totalRevenue += val else if (vtype === "savings") totalSavings += val else if (vtype === "risk_prevention") totalRiskPrevented += val } const stats = { totals: { generated: all.length, approved: approved.length, dismissed: dismissed.length, pending: all.filter((r) => r.status === "pending").length, approval_rate: all.length > 0 ? Math.round((approved.length / all.length) * 100) : 0, }, impact: { revenue: totalRevenue, savings: totalSavings, risk_prevented: totalRiskPrevented, total: totalRevenue + totalSavings + totalRiskPrevented, }, recent_approved: approved .sort((a, b) => new Date(b.applied_at ?? 0).getTime() - new Date(a.applied_at ?? 0).getTime()) .slice(0, 5), } return }