import { fetchApi } from "@/lib/api/http";  // ✅ ADD THIS
import type {
  Template,
  CreateTemplateDto,
  UpdateTemplateDto,
  PaginatedTemplatesResponse,
} from "@/lib/api/types/template.types";

export const TEMPLATES_API_BASE_URL =
  process.env.NEXT_PUBLIC_API_BASE_URL ?? "http://localhost:3007/api";

// ✅ DELETE fetchTemplateApi() entirely

export async function getTemplates(page = 1, limit = 10): Promise<Template[]> {
  const res = await fetchApi<any>(
    `${TEMPLATES_API_BASE_URL}/templates?page=${page}&limit=${limit}`
  );
  return Array.isArray(res) ? res : res.data ?? [];
}

export async function getTemplatesPaginated(
  page = 1,
  limit = 10,
  search = "",
  stage = "",
  templateType = "",
  version = ""
): Promise<PaginatedTemplatesResponse> {
  const params = new URLSearchParams();
  params.set("page",  String(page));
  params.set("limit", String(limit));
  if (search)       params.set("search",       search);
  if (stage)        params.set("stage",         stage);
  if (templateType) params.set("templateType",  templateType);
  if (version)      params.set("version",       version);

  const res = await fetchApi<any>(
    `${TEMPLATES_API_BASE_URL}/templates?${params.toString()}`
  );
  if (Array.isArray(res)) {
    return { data: res, meta: { total: res.length, page: 1, limit: res.length, totalPages: 1, hasNextPage: false, hasPrevPage: false } };
  }
  return res;
}

export async function getTemplate(id: number): Promise<Template> {
  return fetchApi<Template>(`${TEMPLATES_API_BASE_URL}/templates/${id}`);
}

export async function createTemplate(dto: CreateTemplateDto): Promise<Template> {
  return fetchApi<Template>(`${TEMPLATES_API_BASE_URL}/templates`, {
    method: "POST",
    body:   JSON.stringify(dto),
  });
}

export async function updateTemplate(id: number, dto: UpdateTemplateDto): Promise<Template> {
  return fetchApi<Template>(`${TEMPLATES_API_BASE_URL}/templates/${id}`, {
    method: "PATCH",
    body:   JSON.stringify(dto),
  });
}

export async function deleteTemplate(id: number): Promise<void> {
  return fetchApi<void>(`${TEMPLATES_API_BASE_URL}/templates/${id}`, {
    method: "DELETE",
  });
}