import { createCoreAPIClient } from "@/lib/features/coreClient";
import type { AdminActivityLog } from "@/lib/features/activity-logs/query";
import type { CoreResponse } from "@/lib/features/types";
import type { TravelRule, TravelRuleListResult } from "./types";

const coreClient = createCoreAPIClient();

export async function listTravelRules(
  filters?: {
    resort?: string;
    unit_code?: string;
    search?: string;
    page?: number;
    limit?: number;
  },
  headers?: HeadersInit,
): Promise<CoreResponse<TravelRuleListResult>> {
  const params = new URLSearchParams();
  if (filters?.resort) params.set("resort", filters.resort);
  if (filters?.unit_code) params.set("unit_code", filters.unit_code);
  if (filters?.search) params.set("search", filters.search);
  if (filters?.page) params.set("page", String(filters.page));
  if (filters?.limit) params.set("limit", String(filters.limit));
  const qs = params.toString();
  return await coreClient<TravelRuleListResult>(
    `/v1/admin-console/travel-rules${qs ? `?${qs}` : ""}`,
    { method: "GET", headers },
  );
}

export async function getTravelRule(
  id: string,
  headers?: HeadersInit,
): Promise<CoreResponse<TravelRule>> {
  return await coreClient<TravelRule>(`/v1/admin-console/travel-rules/${id}`, {
    method: "GET",
    headers,
  });
}

export async function getTravelRuleLogs(
  ruleId: string,
  page = 1,
  pageSize = 20,
): Promise<CoreResponse<{ items: AdminActivityLog[]; totalCount: number }>> {
  const params = new URLSearchParams({
    search: `travel-rules/${ruleId}`,
    limit: String(pageSize),
    offset: String((page - 1) * pageSize),
  });
  for (const m of ["POST", "PUT", "PATCH", "DELETE"]) {
    params.append("method", m);
  }
  return await coreClient(`/v2/admin/activity-logs?${params.toString()}`, {
    method: "GET",
  });
}
