import { Head, Link } from '@inertiajs/react';
import { Badge } from '@/components/ui/badge';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Separator } from '@/components/ui/separator';
import { Button } from '@/components/ui/button';
import type { Ticket, TicketComment } from '@/types';

type Props = {
    ticket: Ticket & { comments: TicketComment[] };
};

const statusLabels: Record<string, string> = {
    open: 'Open',
    in_progress: 'In Progress',
    pending: 'Pending',
    resolved: 'Resolved',
    closed: 'Closed',
};

const statusColors: Record<string, string> = {
    open: 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-300',
    in_progress:
        'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-300',
    pending:
        'bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-300',
    resolved:
        'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300',
    closed: 'bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-300',
};

const priorityColors: Record<string, string> = {
    low: 'bg-slate-100 text-slate-800',
    medium: 'bg-blue-100 text-blue-800',
    high: 'bg-orange-100 text-orange-800',
    critical: 'bg-red-100 text-red-800',
};

export default function TicketStatus({ ticket }: Props) {
    return (
        <>
            <Head title={`Ticket ${ticket.ticket_no}`} />
            <div className="min-h-screen bg-gray-50 dark:bg-gray-950">
                <header className="border-b bg-white dark:bg-gray-900">
                    <div className="mx-auto flex max-w-4xl items-center justify-between px-4 py-4">
                        <Link href="/" className="text-xl font-bold">
                            Support Center
                        </Link>
                        <div className="flex gap-3">
                            <Button variant="outline" size="sm" asChild>
                                <Link href="/submit">Submit Ticket</Link>
                            </Button>
                            <Button variant="ghost" size="sm" asChild>
                                <Link href="/ticket-status">Track Another</Link>
                            </Button>
                        </div>
                    </div>
                </header>

                <main className="mx-auto max-w-3xl space-y-6 px-4 py-8">
                    {/* Ticket Header */}
                    <div>
                        <div className="flex items-center gap-3">
                            <h1 className="font-mono text-2xl font-bold">
                                {ticket.ticket_no}
                            </h1>
                            <span
                                className={`inline-flex items-center rounded-full px-3 py-1 text-sm font-medium ${statusColors[ticket.status]}`}
                            >
                                {statusLabels[ticket.status] ?? ticket.status}
                            </span>
                            <span
                                className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${priorityColors[ticket.priority]}`}
                            >
                                {ticket.priority}
                            </span>
                        </div>
                        <h2 className="mt-2 text-xl">{ticket.title}</h2>
                    </div>

                    {/* Ticket Details */}
                    <Card>
                        <CardHeader>
                            <CardTitle>Ticket Details</CardTitle>
                        </CardHeader>
                        <CardContent className="space-y-4">
                            <div className="grid grid-cols-2 gap-4 text-sm md:grid-cols-4">
                                <div>
                                    <p className="text-muted-foreground">
                                        Company
                                    </p>
                                    <p className="font-medium">
                                        {ticket.company?.name ?? '—'}
                                    </p>
                                </div>
                                <div>
                                    <p className="text-muted-foreground">
                                        System
                                    </p>
                                    <p className="font-medium">
                                        {ticket.system?.name ?? '—'}
                                    </p>
                                </div>
                                <div>
                                    <p className="text-muted-foreground">
                                        Category
                                    </p>
                                    <p className="font-medium">
                                        {ticket.category?.name ?? '—'}
                                    </p>
                                </div>
                                <div>
                                    <p className="text-muted-foreground">
                                        Submitted
                                    </p>
                                    <p className="font-medium">
                                        {new Date(
                                            ticket.created_at,
                                        ).toLocaleDateString()}
                                    </p>
                                </div>
                            </div>

                            <Separator />

                            <div>
                                <p className="mb-1 text-sm text-muted-foreground">
                                    Description
                                </p>
                                <p className="text-sm whitespace-pre-wrap">
                                    {ticket.description}
                                </p>
                            </div>

                            {ticket.resolved_at && (
                                <>
                                    <Separator />
                                    <p className="text-sm text-green-600">
                                        Resolved on{' '}
                                        {new Date(
                                            ticket.resolved_at,
                                        ).toLocaleString()}
                                    </p>
                                </>
                            )}
                        </CardContent>
                    </Card>

                    {/* Public Comments */}
                    {ticket.comments && ticket.comments.length > 0 && (
                        <Card>
                            <CardHeader>
                                <CardTitle>Updates</CardTitle>
                            </CardHeader>
                            <CardContent>
                                <div className="space-y-4">
                                    {ticket.comments.map((comment) => (
                                        <div
                                            key={comment.id}
                                            className="rounded-md border p-3"
                                        >
                                            <div className="mb-1 flex items-center justify-between text-xs text-muted-foreground">
                                                <span>
                                                    {comment.user?.name ??
                                                        'Support Agent'}
                                                </span>
                                                <span>
                                                    {new Date(
                                                        comment.created_at,
                                                    ).toLocaleString()}
                                                </span>
                                            </div>
                                            <p className="text-sm whitespace-pre-wrap">
                                                {comment.body}
                                            </p>
                                        </div>
                                    ))}
                                </div>
                            </CardContent>
                        </Card>
                    )}

                    {ticket.comments?.length === 0 && (
                        <Card>
                            <CardContent className="py-8 text-center text-sm text-muted-foreground">
                                No updates yet. Our team is working on your
                                ticket.
                            </CardContent>
                        </Card>
                    )}
                </main>

                <footer className="border-t bg-white py-6 text-center text-sm text-muted-foreground dark:bg-gray-900">
                    Have a new issue?{' '}
                    <Link href="/submit" className="text-primary underline">
                        Submit another ticket
                    </Link>
                </footer>
            </div>
        </>
    );
}
