/** Parse a CSV query value to a clean string[] (drops empty tokens). */
export function csvParse(raw: string | null | undefined): string[] {
  if (!raw) return [];
  return raw.split(',').map((s) => s.trim()).filter(Boolean);
}

/** Build a CSV query value ('' when empty -> caller omits). */
export function csvBuild(values: readonly string[]): string {
  return values.join(',');
}

/** Parse + clamp an int query value; returns fallback on NaN/missing. */
export function clampInt(raw: string | null | undefined, o: { min: number; max: number; fallback: number }): number {
  const n = raw == null ? NaN : parseInt(raw, 10);
  if (Number.isNaN(n)) return o.fallback;
  return Math.min(o.max, Math.max(o.min, n));
}

/** Set a query param only when its value differs from the omitted-default. */
export function setIfPresent(sp: URLSearchParams, key: string, value: string, omitWhenEqualTo: string): void {
  if (value !== omitWhenEqualTo && value !== '') sp.set(key, value);
}