export const CLIENT_PAGE_SIZES = [10, 20, 50] as const;

export type ClientsSearch = {
  page: number;
  pageSize: number;
  search?: string;
  connected?: boolean;
};

function parsePage(value: unknown): number {
  const parsed = typeof value === "number" ? value : Number.parseInt(String(value ?? ""), 10);
  return Number.isFinite(parsed) && parsed > 0 ? parsed : 1;
}

function parsePageSize(value: unknown): number {
  const parsed = typeof value === "number" ? value : Number.parseInt(String(value ?? ""), 10);
  return CLIENT_PAGE_SIZES.includes(parsed as (typeof CLIENT_PAGE_SIZES)[number]) ? parsed : 20;
}

export function validateClientsSearch(search: Record<string, unknown>): ClientsSearch {
  return {
    page: parsePage(search.page),
    pageSize: parsePageSize(search.pageSize),
    search: typeof search.search === "string" && search.search.trim() ? search.search : undefined,
    connected: search.connected === true || search.connected === "true",
  };
}

export function clientsListSearch(search: ClientsSearch): ClientsSearch {
  return {
    page: search.page,
    pageSize: search.pageSize,
    search: search.search,
    connected: search.connected || undefined,
  };
}
