import { Head, Link, router } from '@inertiajs/react';
import { ArrowLeft, Trash2 } from 'lucide-react';
import TaskController from '@/actions/App/Http/Controllers/Admin/TaskController';
import { ConfirmDialog } from '@/components/confirm-dialog';
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
import {
    Card,
    CardContent,
    CardHeader,
    CardTitle,
} from '@/components/ui/card';
import { useCan } from '@/hooks/use-can';
import { formatDate } from '@/lib/utils';
import { dashboard } from '@/routes';
import { show as projectShow } from '@/routes/admin/projects';
import { index } from '@/routes/admin/tasks';
import { show as ticketShow } from '@/routes/admin/tickets';
import { TaskPriorityBadge } from './priority-badge';
import { TaskStatusBadge } from './status-badge';

type TaskDetail = {
    id: number;
    code: string;
    title: string;
    description: string | null;
    status: string;
    status_label: string;
    priority: string;
    priority_label: string;
    is_active: boolean;
    due_date: string | null;
    completion_percent: number;
    created_at: string | null;
    project: { id: number; code: string; name: string };
    ticket: { id: number; code: string; title: string } | null;
    assignee: { id: number; name: string } | null;
    creator: { id: number; name: string } | null;
};

export default function TasksShow({ task }: { task: TaskDetail }) {
    const canDelete = useCan('tasks.delete');

    return (
        <>
            <Head title={task.title} />

            <div className="flex h-full flex-1 flex-col gap-6 p-4 md:p-6">
                <div className="flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between">
                    <div className="space-y-2">
                        <div className="flex flex-wrap items-center gap-2">
                            <h1 className="text-xl font-semibold tracking-tight">
                                {task.title}
                            </h1>
                            <TaskStatusBadge
                                status={task.status}
                                label={task.status_label}
                            />
                            <TaskPriorityBadge
                                priority={task.priority}
                                label={task.priority_label}
                            />
                            {!task.is_active && (
                                <Badge variant="outline">Inactif</Badge>
                            )}
                        </div>
                        <p className="text-muted-foreground font-mono text-sm">
                            {task.code}
                        </p>
                    </div>

                    <div className="flex flex-wrap gap-2">
                        {canDelete && (
                            <ConfirmDialog
                                trigger={
                                    <Button variant="destructive">
                                        <Trash2 />
                                        Supprimer
                                    </Button>
                                }
                                title={`Supprimer la tâche ${task.title} ?`}
                                description="Cette action est irréversible."
                                confirmLabel="Supprimer"
                                onConfirm={() => {
                                    router.delete(
                                        TaskController.destroy.url(task.id),
                                    );
                                }}
                            />
                        )}
                        <Button variant="outline" asChild>
                            <Link href={index.url()}>
                                <ArrowLeft />
                                Retour
                            </Link>
                        </Button>
                    </div>
                </div>

                <div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
                    <Card>
                        <CardHeader className="pb-2">
                            <CardTitle className="text-2xl tabular-nums">
                                {task.completion_percent} %
                            </CardTitle>
                        </CardHeader>
                        <CardContent>
                            <div className="bg-muted h-2 overflow-hidden rounded-full">
                                <div
                                    className="bg-primary h-full transition-all"
                                    style={{
                                        width: `${task.completion_percent}%`,
                                    }}
                                />
                            </div>
                        </CardContent>
                    </Card>
                </div>

                <Card>
                    <CardHeader>
                        <CardTitle>Informations</CardTitle>
                    </CardHeader>
                    <CardContent className="space-y-4 text-sm">
                        <div>
                            <p className="text-muted-foreground mb-1">
                                Projet
                            </p>
                            <Link
                                href={projectShow(task.project.id)}
                                className="font-medium hover:underline"
                            >
                                {task.project.code} — {task.project.name}
                            </Link>
                        </div>

                        {task.ticket && (
                            <div>
                                <p className="text-muted-foreground mb-1">
                                    Ticket lié
                                </p>
                                <Link
                                    href={ticketShow(task.ticket.id)}
                                    className="font-medium hover:underline"
                                >
                                    {task.ticket.code} — {task.ticket.title}
                                </Link>
                            </div>
                        )}

                        <div>
                            <p className="text-muted-foreground mb-1">
                                Assigné à
                            </p>
                            <p className="font-medium">
                                {task.assignee?.name ?? '—'}
                            </p>
                        </div>

                        <div>
                            <p className="text-muted-foreground mb-1">
                                Créé par
                            </p>
                            <p className="font-medium">
                                {task.creator?.name ?? '—'}
                            </p>
                        </div>

                        <div>
                            <p className="text-muted-foreground mb-1">
                                Échéance
                            </p>
                            <p className="font-medium">
                                {task.due_date
                                    ? formatDate(task.due_date)
                                    : '—'}
                            </p>
                        </div>

                        {task.description && (
                            <div>
                                <p className="text-muted-foreground mb-1">
                                    Description
                                </p>
                                <p className="whitespace-pre-wrap">
                                    {task.description}
                                </p>
                            </div>
                        )}
                    </CardContent>
                </Card>
            </div>
        </>
    );
}

TasksShow.layout = {
    breadcrumbs: [
        { title: 'Tableau de bord', href: dashboard() },
        { title: 'Tâches', href: index() },
        { title: 'Détail', href: '#' },
    ],
};
