import { usePathname, useRouter, useSearchParams } from 'next/navigation';

const useHandleParams = () => {

    const searchParams = useSearchParams();
    const router = useRouter();
    const pathname = usePathname();
  
    const setParams = (name:string, value:string) => {
      const params = new URLSearchParams(searchParams.toString());
      params.set(name, value);
      if(value === 'all')params.delete(name)
      router.push(pathname + "?" + params.toString());
    };

    const setMultipleParams = (paramsObj: Record<string, string>) => {
      const params = new URLSearchParams(searchParams.toString());
      
      Object.entries(paramsObj).forEach(([key, value]) => {
        params.set(key, value);
      });
  
      router.push(pathname + "?" + params.toString());
    };
  
    const getParam=(name:string)=>{
      const params = new URLSearchParams(searchParams.toString());
      return params.get(name) || ""
    }

    const getAllParams=()=>{
      const params = new URLSearchParams(searchParams.toString());
      return Object.fromEntries(params)
    }

    const removeParam=(name:string)=>{
      const params = new URLSearchParams(searchParams.toString());
      params.delete(name)
      router.push(pathname + "?" + params.toString());
    }

    const clearParams=()=>{
      router.push(pathname);
    }

  return {
    setParams,
    getParam,
    setMultipleParams,
    removeParam,
    clearParams,
    getAllParams
  }
}

export default useHandleParams