import { apiRequest } from "@/services/apiClient";
import type { ApiPaginatedResponse } from "@/types";
import type { Addon } from "@/types/plan";

export const adminAddonsService = {
  async list(
    token: string,
    params?: { search?: string; catalog?: string; page?: number; per_page?: number },
  ) {
    const qs = new URLSearchParams();
    if (params?.catalog) qs.set("catalog", params.catalog);
    if (params?.search) qs.set("search", params.search);
    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<Addon[]>(`/admin/addons${query ? `?${query}` : ""}`, { token }) as Promise<
      ApiPaginatedResponse<Addon>
    >;
  },

  async create(token: string, body: Record<string, unknown>) {
    return apiRequest<Addon>("/admin/addons", { method: "POST", token, body });
  },

  async update(token: string, id: number, body: Record<string, unknown>) {
    return apiRequest<Addon>(`/admin/addons/${id}`, { method: "PUT", token, body });
  },

  async remove(token: string, id: number) {
    return apiRequest<null>(`/admin/addons/${id}`, { method: "DELETE", token });
  },

  async toggle(token: string, id: number) {
    return apiRequest<Addon>(`/admin/addons/${id}/toggle`, { method: "POST", token });
  },

  async reorder(token: string, orderedIds: number[]) {
    return apiRequest<null>("/admin/addons/reorder", {
      method: "POST",
      token,
      body: { orderedIds },
    });
  },
};
