import { useSearchParams, useNavigate } from "react-router-dom";
import {decodeParams, encodeParams, readPlainParams} from "../helpers/encodedParams";
import {useEffect} from "react";

const TOKEN_KEY = "t";

export function useEncodedParams(): [URLSearchParams, (newParams: Record<string, string>, replace?: boolean) => void] {
    const [searchParams] = useSearchParams();
    const navigate = useNavigate();

    const token = searchParams.get(TOKEN_KEY);

    // ✅ If no ?t= token, fall back to reading plain params
    const params = token ? decodeParams(token) : readPlainParams(searchParams);
    const encodedSearchParams = new URLSearchParams(params);

    // ✅ After render, silently normalize the URL to encoded format
    useEffect(() => {
        if (!token && Object.keys(params).length > 0) {
            navigate(
                { search: `?${TOKEN_KEY}=${encodeParams(params)}` },
                { replace: true } // no browser history entry
            );
        }
    }, []); // eslint-disable-line react-hooks/exhaustive-deps

    const setEncodedParams = (newParams: Record<string, string>, replace = false) => {
        const newToken = encodeParams(newParams);
        navigate({ search: `?${TOKEN_KEY}=${newToken}` }, { replace });
    };

    return [encodedSearchParams, setEncodedParams];
}
