"use client";

import { Input } from "@/components/ui/input";
import { cn } from "@/lib/utils";
import { usePathname, useRouter, useSearchParams } from "next/navigation";
import { useRef, useTransition } from "react";

export default function Search({ disabled }: { disabled?: boolean }) {
	const inputRef = useRef<HTMLInputElement>(null);
	const { replace } = useRouter();

	const pathname = usePathname();
	const [isPending, startTransition] = useTransition();
	const searchParams = useSearchParams();
	const searchQuery = searchParams.get("query");

	function handleSearch(term: string) {
		const params = new URLSearchParams(searchParams.toString());

		if (term) {
			params.set("query", term);
			params.set("page", "1");
		} else {
			params.delete("query");
		}

		startTransition(() => {
			replace(`${pathname}?${params.toString()}`);
		});
	}

	return (
		<Input
			ref={inputRef}
			placeholder="Search..."
			type="search"
			className={cn("w-fit", isPending && "animate-pulse")}
			name="search"
			id="search"
			defaultValue={searchQuery ? searchQuery : ""}
			disabled={disabled}
			spellCheck={false}
			onChange={(e) => handleSearch(e.target.value)}
		/>
	);
}