import { router } from '@inertiajs/react';
import { AlertCircle } from 'lucide-react';
import { useState } from 'react';
import { toast } from 'sonner';

import { ConfirmDeleteDialog } from '@/components/ConfirmDeleteDialog';
import { destroy } from '@/routes/tasks/tasks';
import type { Task } from '@/types/task';

interface DeleteTaskDialogProps {
    task: Task | null;
    open: boolean;
    onOpenChange: (open: boolean) => void;
    onSuccess?: () => void;
}

export function DeleteTaskDialog({
    task,
    open,
    onOpenChange,
    onSuccess,
}: DeleteTaskDialogProps) {
    const [processing, setProcessing] = useState(false);

    const handleDelete = () => {
        if (!task) {
            return;
        }

        router.delete(destroy({ task: task.code }).url, {
            onBefore: () => setProcessing(true),
            onFinish: () => setProcessing(false),
            onSuccess: () => {
                toast.success('Task deleted or cancelled');
                onOpenChange(false);
                onSuccess?.();
            },
            onError: (errors) => {
                console.error('Delete errors:', errors);
                toast.error(
                    Object.values(errors)[0] || 'Failed to delete task',
                );
            },
        });
    };

    return (
        <ConfirmDeleteDialog
            open={open}
            onOpenChange={onOpenChange}
            onConfirm={handleDelete}
            processing={processing}
            variant="center"
            icon={AlertCircle}
            title="Delete Task?"
            description={
                <>
                    Delete or cancel{' '}
                    <span className="font-bold text-foreground underline decoration-red-500/30">
                        "{task?.title}"
                    </span>
                    ? Tasks that already have activity will be cancelled so
                    their history is preserved.
                </>
            }
            confirmLabel="Continue"
            cancelLabel="Back"
            processingLabel="Removing..."
        />
    );
}
