"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
;
console.log("Correspondence Detail Data:", data);
// 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({
id: data.id,
data: {}
});
}
};
const handleProcess = () => {
if (!actionState) return;
const action = actionState === "approve" ? "APPROVE" : "REJECT";
processMutation.mutate({
id: data.id,
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
Originator
{data.originator?.organizationName || '-'}
{data.originator?.organizationCode || '-'}
Project
{data.project?.projectName || '-'}
{data.project?.projectCode || '-'}
);
}