import { apiRequest } from "@/services/apiClient";
import type { ApiPaginatedResponse } from "@/types";
import type { HelpAnalytics, HelpArticle, HelpCategory, HelpTicket } from "@/types/help";

export type HelpCategorySaveInput = Partial<Omit<HelpCategory, "sortOrder">> & {
  name: string;
  sort_order?: number;
};

export const adminHelpService = {
  async analytics(token: string) {
    return apiRequest<HelpAnalytics>("/admin/help/analytics", { token });
  },

  async listCategories(token: string) {
    return apiRequest<HelpCategory[]>("/admin/help/categories", { token });
  },

  async saveCategory(
    token: string,
    body: HelpCategorySaveInput,
    id?: number,
  ) {
    if (id) {
      return apiRequest<HelpCategory>(`/admin/help/categories/${id}`, {
        method: "PUT",
        token,
        body,
      });
    }
    return apiRequest<HelpCategory>("/admin/help/categories", { method: "POST", token, body });
  },

  async toggleCategory(token: string, id: number) {
    return apiRequest<HelpCategory>(`/admin/help/categories/${id}/toggle`, {
      method: "POST",
      token,
    });
  },

  async deleteCategory(token: string, id: number) {
    return apiRequest<null>(`/admin/help/categories/${id}`, { method: "DELETE", token });
  },

  async listArticles(
    token: string,
    params?: { search?: string; category_id?: number; status?: string; page?: number; per_page?: number },
  ) {
    const qs = new URLSearchParams();
    if (params?.search) qs.set("search", params.search);
    if (params?.category_id) qs.set("category_id", String(params.category_id));
    if (params?.status) qs.set("status", params.status);
    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<HelpArticle[]>(`/admin/help/articles${query ? `?${query}` : ""}`, {
      token,
    }) as Promise<ApiPaginatedResponse<HelpArticle>>;
  },

  async getArticle(token: string, id: number) {
    return apiRequest<HelpArticle>(`/admin/help/articles/${id}`, { token });
  },

  async saveArticle(token: string, body: Record<string, unknown>, id?: number) {
    if (id) {
      return apiRequest<HelpArticle>(`/admin/help/articles/${id}`, {
        method: "PUT",
        token,
        body,
      });
    }
    return apiRequest<HelpArticle>("/admin/help/articles", { method: "POST", token, body });
  },

  async toggleArticle(token: string, id: number) {
    return apiRequest<HelpArticle>(`/admin/help/articles/${id}/toggle`, {
      method: "POST",
      token,
    });
  },

  async deleteArticle(token: string, id: number) {
    return apiRequest<null>(`/admin/help/articles/${id}`, { method: "DELETE", token });
  },

  async listTickets(token: string, params?: { status?: string; page?: number }) {
    const qs = new URLSearchParams();
    if (params?.status) qs.set("status", params.status);
    if (params?.page) qs.set("page", String(params.page));
    const query = qs.toString();
    return apiRequest<HelpTicket[]>(`/admin/help/tickets${query ? `?${query}` : ""}`, {
      token,
    }) as Promise<ApiPaginatedResponse<HelpTicket>>;
  },

  async updateTicket(
    token: string,
    id: number,
    body: { status?: string; priority?: string; assigned_to?: number | null },
  ) {
    return apiRequest<HelpTicket>(`/admin/help/tickets/${id}`, { method: "PUT", token, body });
  },
};
