"use client";

import Link from "next/link";
import { Eye, Pencil } from "lucide-react";

import { Button } from "@/components/ui/button";
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";

import { DashboardDeleteAction } from "./dashboard-delete-action";

type DashboardMasterRowActionsProps = {
  viewHref?: string;
  viewAriaLabel?: string;
  editHref: string;
  editAriaLabel: string;
  deleteUrl: string;
  entityId: number;
  entityName: string;
  entityLabel: string;
  fallbackError: string;
  defaultSuccessMessage: string;
  showDelete?: boolean;
  onDeleted?: () => void;
};

export function DashboardMasterRowActions({
  viewHref,
  viewAriaLabel = "View",
  editHref,
  editAriaLabel,
  deleteUrl,
  entityId,
  entityName,
  entityLabel,
  fallbackError,
  defaultSuccessMessage,
  showDelete = true,
  onDeleted,
}: DashboardMasterRowActionsProps) {
  return (
    <div className="flex flex-wrap items-center justify-end gap-0.5">
      {viewHref ? (
        <Tooltip>
          <TooltipTrigger asChild>
            <Button variant="secondary" size="icon-sm" className="size-7" asChild>
              <Link href={viewHref} aria-label={viewAriaLabel}>
                <Eye className="size-3.5" />
              </Link>
            </Button>
          </TooltipTrigger>
          <TooltipContent>View</TooltipContent>
        </Tooltip>
      ) : null}
      <Tooltip>
        <TooltipTrigger asChild>
          <Button variant="secondary" size="icon-sm" className="size-7" asChild>
            <Link href={editHref} aria-label={editAriaLabel}>
              <Pencil className="size-3.5" />
            </Link>
          </Button>
        </TooltipTrigger>
        <TooltipContent>Update</TooltipContent>
      </Tooltip>
      {showDelete ? (
        <DashboardDeleteAction
          deleteUrl={deleteUrl}
          entityId={entityId}
          fallbackError={fallbackError}
          defaultSuccessMessage={defaultSuccessMessage}
          dialogTitle={`Delete ${entityLabel}?`}
          dialogDescription={
            <>
              This will delete {entityName}. This action cannot be undone.
            </>
          }
          confirmLabel={`Delete ${entityLabel}`}
          deleteAriaLabel={`Delete ${entityLabel}`}
          onDeleted={onDeleted}
        />
      ) : null}
    </div>
  );
}
