// components/web/admin/ReservationActions.tsx
"use client"

import { useTransition } from "react"
import { Button } from "@/components/ui/button"
import { toast } from "sonner"
import { fulfilReservation, cancelReservation } from "@/lib/actions/loans"

type Props = {
  reservationId: string
  bookId: string
  userId: string
  physicalCopyId: string | null
  status: "PENDING" | "FULFILLED" | "CANCELLED"
}

export default function ReservationActions({
  reservationId, bookId, userId, physicalCopyId, status
}: Props) {
  const [isPending, startTransition] = useTransition()

  if (status !== "PENDING") return null

  function handle(action: "fulfil" | "cancel") {
    startTransition(async () => {
      const result = action === "fulfil"
        ? await fulfilReservation(reservationId, bookId, userId, physicalCopyId)
        : await cancelReservation(reservationId, physicalCopyId)

      toast[result.status === "success" ? "success" : "error"](
        result.message ?? (action === "fulfil" ? "Reservation fulfilled" : "Reservation cancelled")
      )
    })
  }

  return (
    <div className="flex items-center gap-2">
      <Button
        size="sm"
        onClick={() => handle("fulfil")}
        disabled={isPending}
        type="button"
      >
        Confirm Pickup
      </Button>
      <Button
        size="sm"
        variant="outline"
        onClick={() => handle("cancel")}
        disabled={isPending}
        type="button"
      >
        Cancel
      </Button>
    </div>
  )
}