import React, { useState } from 'react';
import { Head, Link, useForm } from '@inertiajs/react';
import AdminLayout from '@/Layouts/AdminLayout';
import {
ArrowLeft,
Clock,
CheckCircle,
AlertCircle,
Send,
Terminal,
User,
Mail,
LifeBuoy,
Shield,
Sparkles,
Loader2
} from 'lucide-react';
import axios from 'axios';
import { toast } from 'sonner';
export default function Show({ ticket, replies }) {
const [generatingDev, setGeneratingDev] = useState(false);
const [isDevChecked, setIsDevChecked] = useState(false);
const replyForm = useForm({
message: '',
is_developer_response: false,
});
const statusForm = useForm({
status: ticket.status,
});
const handleReplySubmit = (e) => {
e.preventDefault();
replyForm.post(`/admin/tickets/${ticket.id}/reply`, {
onSuccess: () => {
replyForm.reset('message');
setIsDevChecked(false);
toast.success('Reply posted successfully.');
}
});
};
const handleStatusChange = (newStatus) => {
statusForm.setData('status', newStatus);
statusForm.post(`/admin/tickets/${ticket.id}/status`, {
onSuccess: () => {
toast.success('Ticket status updated successfully.');
}
});
};
const generateDeveloperDraft = async () => {
setGeneratingDev(true);
try {
const res = await axios.post(`/admin/tickets/${ticket.id}/generate-dev-response`);
if (res.data && res.data.response) {
replyForm.setData({
message: res.data.response,
is_developer_response: true
});
setIsDevChecked(true);
toast.success('Senior Software Developer draft generated!');
}
} catch (err) {
toast.error('Failed to generate developer response. Please try again.');
} finally {
setGeneratingDev(false);
}
};
const getStatusColor = (status) => {
switch (status) {
case 'open': return 'bg-blue-50 text-blue-700 border-blue-200';
case 'in_progress': return 'bg-amber-50 text-amber-700 border-amber-200';
case 'resolved': return 'bg-emerald-50 text-emerald-700 border-emerald-200';
case 'closed': return 'bg-slate-100 text-slate-600 border-slate-200';
default: return 'bg-slate-50 text-slate-600';
}
};
return (
Respond directly to the customer or draft as developer.
This ticket has been marked closed. Change status above to reopen and reply.
User account information associated with ticket