"use client"; import { useState } from "react"; import { Lightbulb, Loader2, RefreshCcw, X, AlertCircle } from "lucide-react"; import { runLeavePatternAnalysis } from "@/lib/supabase/ai-actions"; import type { LeavePatternResult, LeaveRequestForAI } from "@/lib/gemini"; interface LeavePatternInsightsProps { leaveRequests: { employee_name: string; leave_type_name: string; start_date: string; end_date: string; days_count: number; status: string; reason: string | null; }[]; monthLabel: string; } export function LeavePatternInsights({ leaveRequests, monthLabel }: LeavePatternInsightsProps) { const [analyzing, setAnalyzing] = useState(false); const [result, setResult] = useState(null); const [error, setError] = useState(null); const [dismissed, setDismissed] = useState(false); const handleAnalyze = async () => { setAnalyzing(true); setError(null); try { const leaveData: LeaveRequestForAI[] = leaveRequests.map((r) => ({ employee_name: r.employee_name, leave_type_name: r.leave_type_name, start_date: r.start_date, end_date: r.end_date, days_count: r.days_count, status: r.status, reason: r.reason, })); const response = await runLeavePatternAnalysis(leaveData, monthLabel); if (!response.success) { if (response.blocked) { setError(`You've reached your free tier limit for AI queries (${response.current}/${response.limit}). Upgrade to Pro for unlimited access.`); } else { setError(response.error || "Analysis failed"); } return; } if (response.result) { setResult(response.result); setDismissed(false); } } catch (e: any) { setError(e.message || "Analysis failed"); } finally { setAnalyzing(false); } }; if (dismissed && result && !result.hasInsights) return null; return (
{/* Trigger button when no result */} {!result && !analyzing && ( )} {/* Loading state */} {analyzing && (
Analyzing leave patterns...
)} {/* Error state */} {error && !analyzing && (

AI Check Failed

{error}

)} {/* Result */} {result && !analyzing && (
{result.hasInsights ? ( ) : ( )}

{result.hasInsights ? "Leave Pattern Insights" : "No Notable Patterns"}

{monthLabel}

{result.hasInsights && result.insights.length > 0 && (
{result.insights.map((insight, i) => (
{i + 1}

{insight}

))}
)} {!result.hasInsights && (

Leave patterns look normal for this period. No unusual patterns detected.

)}
)}
); }