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

import { removeMember as removeMemberAction } from '@/actions/App/Domains/Project/Http/Controllers/ProjectController';
import { ConfirmDeleteDialog } from '@/components/ConfirmDeleteDialog';
import type { ProjectTeamMember } from '@/types/project';

interface RemoveMemberDialogProps {
    projectId: number;
    member: ProjectTeamMember | null;
    open: boolean;
    onOpenChange: (open: boolean) => void;
}

export function RemoveMemberDialog({
    projectId,
    member,
    open,
    onOpenChange,
}: RemoveMemberDialogProps) {
    const [processing, setProcessing] = useState(false);

    const handleRemove = () => {
        if (!member) {
            return;
        }

        setProcessing(true);
        router.delete(
            removeMemberAction({
                project: projectId,
                user: Number(member.userId),
            }).url,
            {
                onSuccess: () => {
                    setProcessing(false);
                    onOpenChange(false);
                },
                onError: (errors) => {
                    setProcessing(false);
                    // Surface the backend guard message (e.g. last-owner
                    // protection) instead of failing silently.
                    toast.error(
                        errors.member ??
                            'Failed to remove the member from this project.',
                    );
                },
            },
        );
    };

    if (!member) {
        return null;
    }

    return (
        <ConfirmDeleteDialog
            open={open}
            onOpenChange={onOpenChange}
            onConfirm={handleRemove}
            processing={processing}
            title="Remove Member"
            description={
                <>
                    Are you sure you want to remove{' '}
                    <span className="font-semibold text-foreground">
                        {member.user.firstName} {member.user.lastName}
                    </span>{' '}
                    from this project? This action cannot be undone.
                </>
            }
            confirmLabel="Remove Member"
            cancelLabel="Cancel"
            processingLabel="Removing..."
        />
    );
}
