import { Link } from '@inertiajs/react';
import { Eye, MoreHorizontal, Pencil, Trash2 } from 'lucide-react';
import type { ComponentProps } from 'react';
import { Button } from '@/components/ui/button';
import {
    DropdownMenu,
    DropdownMenuContent,
    DropdownMenuItem,
    DropdownMenuLabel,
    DropdownMenuSeparator,
    DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu';

type DataTableRowActionsProps = {
    // Link ke halaman detail (mis. pesan masuk).
    viewHref?: ComponentProps<typeof Link>['href'];
    // Edit via halaman terpisah (route edit).
    editHref?: ComponentProps<typeof Link>['href'];
    // Edit via dialog inline.
    onEdit?: () => void;
    // Hapus — biasanya membuka dialog konfirmasi di halaman.
    onDelete?: () => void;
    deleteDisabled?: boolean;
    deleteTitle?: string;
};

/**
 * Kolom aksi ala shadcn data-table: tombol titik tiga (⋯) yang membuka
 * DropdownMenu berisi Detail / Edit / Hapus — tabel tetap bersih.
 */
export function DataTableRowActions({
    viewHref,
    editHref,
    onEdit,
    onDelete,
    deleteDisabled,
    deleteTitle,
}: DataTableRowActionsProps) {
    const hasAny = Boolean(viewHref || editHref || onEdit || onDelete);

    if (!hasAny) {
        return null;
    }

    const hasEdit = Boolean(editHref || onEdit);
    const hasView = Boolean(viewHref);

    return (
        <div className="flex justify-end">
            <DropdownMenu>
                <DropdownMenuTrigger asChild>
                    <Button variant="ghost" className="h-8 w-8 p-0">
                        <span className="sr-only">Buka menu aksi</span>
                        <MoreHorizontal className="size-4" />
                    </Button>
                </DropdownMenuTrigger>
                <DropdownMenuContent align="end">
                    <DropdownMenuLabel className="text-xs font-medium text-muted-foreground">
                        Aksi
                    </DropdownMenuLabel>
                    {viewHref && (
                        <DropdownMenuItem asChild>
                            <Link href={viewHref}>
                                <Eye className="size-4" />
                                Detail
                            </Link>
                        </DropdownMenuItem>
                    )}
                    {editHref && (
                        <DropdownMenuItem asChild>
                            <Link href={editHref}>
                                <Pencil className="size-4" />
                                Ubah
                            </Link>
                        </DropdownMenuItem>
                    )}
                    {onEdit && (
                        <DropdownMenuItem onClick={onEdit}>
                            <Pencil className="size-4" />
                            Ubah
                        </DropdownMenuItem>
                    )}
                    {(hasView || hasEdit) && onDelete && <DropdownMenuSeparator />}
                    {onDelete && (
                        <DropdownMenuItem
                            variant="destructive"
                            onClick={onDelete}
                            disabled={deleteDisabled}
                            title={deleteTitle}
                        >
                            <Trash2 className="size-4" />
                            Hapus
                        </DropdownMenuItem>
                    )}
                </DropdownMenuContent>
            </DropdownMenu>
        </div>
    );
}
