'use client';
import { Correspondence } from '@/types/correspondence';
import { StatusBadge } from '@/components/common/status-badge';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { format } from 'date-fns';
import { ArrowLeft, Download, FileText, Loader2, Send, CheckCircle, XCircle, Edit } from 'lucide-react';
import Link from 'next/link';
import { useSubmitCorrespondence, useProcessWorkflow } from '@/hooks/use-correspondence';
import { useState } from 'react';
import { Label } from '@/components/ui/label';
import { Textarea } from '@/components/ui/textarea';
interface CorrespondenceDetailProps {
data: Correspondence;
}
export function CorrespondenceDetail({ data }: CorrespondenceDetailProps) {
const submitMutation = useSubmitCorrespondence();
const processMutation = useProcessWorkflow();
const [actionState, setActionState] = useState<'approve' | 'reject' | null>(null);
const [comments, setComments] = useState('');
if (!data) return
No data found
;
// Derive Current Revision Data
const currentRevision = data.revisions?.find((r) => r.isCurrent) || data.revisions?.[0];
const subject = currentRevision?.subject || '-';
const description = currentRevision?.description || '-';
const status = currentRevision?.status?.statusCode || 'UNKNOWN'; // e.g. DRAFT
const attachments = currentRevision?.attachments || [];
// Note: Importance might be in details
const importance = currentRevision?.details?.importance || 'NORMAL';
const handleSubmit = () => {
if (confirm('Are you sure you want to submit this correspondence?')) {
submitMutation.mutate({
uuid: data.uuid,
data: {},
});
}
};
const handleProcess = () => {
if (!actionState) return;
const action = actionState === 'approve' ? 'APPROVE' : 'REJECT';
processMutation.mutate(
{
uuid: data.uuid,
data: {
action,
comments,
},
},
{
onSuccess: () => {
setActionState(null);
setComments('');
},
}
);
};
return (
{/* Header / Actions */}
{data.correspondenceNumber}
Created on {data.createdAt ? format(new Date(data.createdAt), 'dd MMM yyyy HH:mm') : '-'}
{/* EDIT BUTTON LOGIC: Show if DRAFT */}
{status === 'DRAFT' && (
)}
{status === 'DRAFT' && (
)}
{status === 'IN_REVIEW' && (
<>
>
)}
{/* Action Input Area */}
{actionState && (
{actionState === 'approve' ? 'Confirm Approval' : 'Confirm Rejection'}
)}
{/* Main Content */}
{subject}
Description
{description}
{currentRevision?.body && (
Content
{currentRevision.body}
)}
{currentRevision?.remarks && (
Remarks
{currentRevision.remarks}
)}
Attachments
{attachments && attachments.length > 0 ? (
{attachments.map((file, index) => (
))}
) : (
No attachments found.
)}
{/* Sidebar Info */}
Information
Importance
{String(importance)}
Originator
{data.originator?.organizationName || '-'}
{data.originator?.organizationCode || '-'}
Project
{data.project?.projectName || '-'}
{data.project?.projectCode || '-'}
);
}