"use client";

import Link from "next/link";
import type { ReactNode } from "react";

type AdminRowActionsProps = {
  children?: ReactNode;
  deleteAction?: (formData: FormData) => void | Promise<void>;
  deleteConfirm?: string;
  deleteFields?: Record<string, string>;
  deleteId?: string;
  deleteLabel?: string;
  modifyHref?: string;
  modifyLabel?: string;
  viewHref?: string;
  viewLabel?: string;
};

export function AdminRowActions({
  children,
  deleteAction,
  deleteConfirm = "Are you sure you want to delete this item?",
  deleteFields,
  deleteId,
  deleteLabel = "Delete",
  modifyHref,
  modifyLabel = "Modify",
  viewHref,
  viewLabel = "View"
}: AdminRowActionsProps) {
  return (
    <div className="admin-actions">
      {viewHref ? (
        <Link className="admin-btn admin-btn-view" href={viewHref}>
          {viewLabel}
        </Link>
      ) : null}
      {modifyHref ? (
        <Link className="admin-btn admin-btn-modify" href={modifyHref}>
          {modifyLabel}
        </Link>
      ) : null}
      {children}
      {deleteAction && deleteId ? (
        <form
          action={deleteAction}
          onSubmit={(event) => {
            if (!window.confirm(deleteConfirm)) {
              event.preventDefault();
            }
          }}
        >
          <input name="id" type="hidden" value={deleteId} />
          {deleteFields
            ? Object.entries(deleteFields).map(([name, value]) => (
                <input key={name} name={name} type="hidden" value={value} />
              ))
            : null}
          <button className="admin-btn admin-btn-delete" type="submit">
            {deleteLabel}
          </button>
        </form>
      ) : null}
    </div>
  );
}
