import React, { useState, useEffect } from 'react'; import { motion } from 'framer-motion'; import { Scale, X, Calendar, Users, FileText, Clock, Shield, Download, Eye, Upload } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Card } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { EvidenceUpload } from '../evidence/EvidenceUpload'; interface CaseDetailsModalProps { isOpen: boolean; onClose: () => void; caseData: any; } export function CaseDetailsModal({ isOpen, onClose, caseData }: CaseDetailsModalProps) { const [artifacts, setArtifacts] = useState([]); const [timeline, setTimeline] = useState([]); const [isLoading, setIsLoading] = useState(true); useEffect(() => { if (isOpen && caseData) { fetchCaseArtifacts(); fetchCaseTimeline(); } }, [isOpen, caseData]); const fetchCaseArtifacts = async () => { try { const response = await fetch(`/api/v1/cases/${caseData.id}/artifacts`, { headers: { 'Authorization': `Bearer ${localStorage.getItem('chittychain_token')}`, }, }); if (response.ok) { const data = await response.json(); setArtifacts(data.artifacts || []); } } catch (error) { console.error('Error fetching artifacts:', error); } }; const fetchCaseTimeline = async () => { try { const response = await fetch(`/api/v1/evidence/${caseData.id}/timeline`, { headers: { 'Authorization': `Bearer ${localStorage.getItem('chittychain_token')}`, }, }); if (response.ok) { const data = await response.json(); setTimeline(data.timeline || []); } } catch (error) { console.error('Error fetching timeline:', error); } finally { setIsLoading(false); } }; const statusColors = { PENDING: 'bg-yellow-500/20 text-yellow-400 border-yellow-500/30', ACTIVE: 'bg-blue-500/20 text-blue-400 border-blue-500/30', DISCOVERY: 'bg-purple-500/20 text-purple-400 border-purple-500/30', TRIAL: 'bg-orange-500/20 text-orange-400 border-orange-500/30', CLOSED: 'bg-gray-500/20 text-gray-400 border-gray-500/30', SETTLED: 'bg-green-500/20 text-green-400 border-green-500/30', }; if (!isOpen) return null; return ( e.stopPropagation()} className="w-full max-w-6xl max-h-[90vh] overflow-y-auto" > {/* Header */}

{caseData.caseNumber}

{caseData.status} {caseData.caseType} {caseData.jurisdiction}
Overview Evidence Timeline Upload {/* Case Information */}

Parties

Petitioner:

{caseData.petitioner}

{caseData.respondent && (
Respondent:

{caseData.respondent}

)} {caseData.judge && (
Judge:

{caseData.judge}

)}

Important Dates

Filing Date:

{new Date(caseData.filingDate).toLocaleDateString()}

Last Activity:

{new Date(caseData.lastActivity).toLocaleDateString()}

{caseData.nextHearing && (
Next Hearing:

{new Date(caseData.nextHearing).toLocaleDateString()}

)}
{/* Case Stats */}

Blockchain Security

{caseData.artifactCount}
Evidence Artifacts
100%
Integrity Verified
256-bit
Encryption
{artifacts.length > 0 ? ( artifacts.map((artifact: any, index: number) => (

{artifact.description}

Type: {artifact.type} • Uploaded: {new Date(artifact.submittedAt).toLocaleDateString()}

)) ) : (

No evidence uploaded

Upload evidence to secure it on the blockchain

)}
{timeline.length > 0 ? (
{timeline.map((event: any, index: number) => (

{event.description}

{new Date(event.submittedAt).toLocaleString()}

{event.status && ( {event.status} )}
))}
) : (

No timeline events

Case activity will appear here

)}
{ fetchCaseArtifacts(); fetchCaseTimeline(); }} />
); }