/**
 * 조건부 쿼리 파라미터 빌더
 *
 * 43개 actions.ts에서 반복되는 URLSearchParams 보일러플레이트를 제거합니다.
 * - undefined/null/'' 자동 필터링
 * - boolean/number 자동 String 변환
 *
 * 적용 범위: 신규 코드만 (기존 코드 마이그레이션 없음)
 */

type ParamValue = string | number | boolean | undefined | null;

/**
 * 조건부 쿼리 파라미터를 URLSearchParams로 변환
 * undefined/null/'' 값은 자동으로 제외됩니다.
 */
export function buildQueryParams(
  params: Record<string, ParamValue>
): URLSearchParams {
  const searchParams = new URLSearchParams();
  for (const [key, value] of Object.entries(params)) {
    if (value === undefined || value === null || value === '') continue;
    searchParams.set(key, String(value));
  }
  return searchParams;
}

/**
 * API URL + 조건부 쿼리 파라미터를 결합한 전체 URL 생성
 *
 * @example
 * buildApiUrl('/api/v1/bills', {
 *   search: params.search,
 *   bill_type: params.billType !== 'all' ? params.billType : undefined,
 *   page: params.page,
 *   per_page: params.perPage,
 * })
 * // → "https://api.example.com/api/v1/bills?search=test&page=1&per_page=20"
 */
export function buildApiUrl(
  path: string,
  params?: Record<string, ParamValue>
): string {
  const API_URL = process.env.NEXT_PUBLIC_API_URL;
  if (!params) return `${API_URL}${path}`;
  const qs = buildQueryParams(params).toString();
  return qs ? `${API_URL}${path}?${qs}` : `${API_URL}${path}`;
}
