import { Link } from "react-router";
import { Film, Tv } from "lucide-react";
import { useCanRequest } from "@/hooks/useCanRequest";
import { useRequestSearch } from "@/hooks/queries/useRequests";
import type { RequestMediaResult } from "@/api/types";
import { formatRequestReason, tmdbImageURL } from "@/lib/mediaRequests";
import { cn } from "@/lib/utils";
import RequestPosterCard from "./RequestPosterCard";
const DIALOG_LIMIT = 4;
const GRID_LIMIT = 20;
export type RequestToAddSectionProps = {
variant: "dialog" | "grid";
query: string;
/** True when the library search returned at least one hit. Drives header copy. */
libraryHadHits: boolean;
};
export function RequestToAddSection({ variant, query, libraryHadHits }: RequestToAddSectionProps) {
const { discoveryEnabled } = useCanRequest();
const search = useRequestSearch("all", query, 1, { enabled: discoveryEnabled });
if (!discoveryEnabled) return null;
if (search.isError) return null;
const filtered = (search.data?.results ?? []).filter(
(item) => item.availability !== "available",
);
if (filtered.length === 0) return null;
const limit = variant === "dialog" ? DIALOG_LIMIT : GRID_LIMIT;
const visible = filtered.slice(0, limit);
if (variant === "dialog") {
return