import { apiRequest } from "@/services/apiClient";
import type { ApiPaginatedResponse } from "@/types";
import type { SeoPageBulkRow, SeoPageRecord, SeoPageStats } from "@/types/seoPage";

export const adminSeoService = {
  async stats(token: string) {
    return apiRequest<SeoPageStats>("/admin/seo-pages/stats", { token });
  },

  async list(
    token: string,
    params?: {
      search?: string;
      service?: string;
      segment?: string;
      active?: boolean;
      page?: number;
      per_page?: number;
    },
  ) {
    const qs = new URLSearchParams();
    if (params?.search) qs.set("search", params.search);
    if (params?.service) qs.set("service", params.service);
    if (params?.segment) qs.set("segment", params.segment);
    if (params?.active !== undefined) qs.set("active", params.active ? "1" : "0");
    if (params?.page) qs.set("page", String(params.page));
    if (params?.per_page) qs.set("per_page", String(params.per_page));
    const query = qs.toString();
    return apiRequest<SeoPageRecord[]>(`/admin/seo-pages${query ? `?${query}` : ""}`, {
      token,
    }) as Promise<ApiPaginatedResponse<SeoPageRecord>>;
  },

  async update(token: string, id: number, body: Partial<SeoPageBulkRow> & { active?: boolean }) {
    return apiRequest<SeoPageRecord>(`/admin/seo-pages/${id}`, { method: "PUT", token, body });
  },

  async toggle(token: string, id: number) {
    return apiRequest<SeoPageRecord>(`/admin/seo-pages/${id}/toggle`, { method: "POST", token });
  },

  async remove(token: string, id: number) {
    return apiRequest<null>(`/admin/seo-pages/${id}`, { method: "DELETE", token });
  },

  async bulkUpsert(token: string, pages: SeoPageBulkRow[]) {
    return apiRequest<{ upserted: number }>("/admin/seo-pages/bulk", {
      method: "POST",
      token,
      body: { pages },
    });
  },
};
