"use client" import { useState, useMemo } from "react" import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query" import { useToast } from "@/components/ui/use-toast" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Badge } from "@/components/ui/badge" import { Input } from "@/components/ui/input" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Textarea } from "@/components/ui/textarea" import { Plus, ExternalLink, Globe, Lock, AlertTriangle, CheckCircle2, Clock, XCircle, LayoutTemplate, Activity, TrendingUp, Filter, Search, Wrench, Trash2, } from "lucide-react" import { getStatusPages, deleteStatusPage, getStatusPageUrl, type StatusPage, } from "@/lib/statuspages" import { getIncidents, createIncident, acknowledgeIncident, resolveIncident, closeIncident, getIncidentStats, type Incident, type CreateIncidentRequest, getSeverityColor, getStatusColor, formatDuration, } from "@/lib/incidents" import { StatusPageDialog } from "./status-page-dialog" import { cn } from "@/lib/utils" // Quick Stats Card Component function QuickStatCard({ title, value, subtitle, icon: Icon, trend, color = "blue", }: { title: string value: string | number subtitle?: string icon: React.ElementType trend?: { value: number; positive: boolean } color?: "blue" | "green" | "yellow" | "red" | "purple" }) { const colorClasses = { blue: "bg-blue-500/10 text-blue-600 border-blue-500/20", green: "bg-green-500/10 text-green-600 border-green-500/20", yellow: "bg-yellow-500/10 text-yellow-600 border-yellow-500/20", red: "bg-red-500/10 text-red-600 border-red-500/20", purple: "bg-purple-500/10 text-purple-600 border-purple-500/20", } return ( {title}
{value}
{subtitle && (

{subtitle}

)} {trend && (
{trend.value}%
)}
) } // Incident Quick Actions Menu function IncidentQuickActions({ incident, onAcknowledge, onResolve, onClose, }: { incident: Incident onAcknowledge: (id: string) => void onResolve: (id: string) => void onClose: (id: string) => void }) { const [showResolveDialog, setShowResolveDialog] = useState(false) const [resolution, setResolution] = useState("") return (
{incident.status === "open" && ( )} {(incident.status === "open" || incident.status === "acknowledged") && ( <> Resolve Incident Add resolution details for this incident.