import { apiRequest } from "@/services/apiClient";
import type {
  AppCreationAccess,
  AppCreationCategory,
  AppCreationOptional,
  AppCreationPlan,
  AppCreationQuote,
} from "@/types/appCreation";

export const appCreationService = {
  async getAccess(token: string) {
    const res = await apiRequest<AppCreationAccess>("/client/app-creation/access", {
      token,
    });
    return res.data;
  },

  async unlock(token: string) {
    return apiRequest<{ projectId: number }>("/client/app-creation/unlock", {
      method: "POST",
      token,
    });
  },

  async getCatalog(token: string) {
    const res = await apiRequest<{
      plans: AppCreationPlan[];
      categories: AppCreationCategory[];
      optionals: AppCreationOptional[];
      project: unknown;
    }>("/client/app-creation/catalog", { token });
    return res.data;
  },

  async calculate(
    token: string,
    payload: {
      plan_id: number;
      optional_ids?: number[];
      billing_cycle: "monthly" | "yearly";
      platforms?: string[];
    },
  ) {
    const res = await apiRequest<AppCreationQuote>("/client/app-creation/calculate", {
      method: "POST",
      token,
      body: payload,
    });
    return res.data;
  },

  async saveQuote(
    token: string,
    payload: {
      plan_id: number;
      optional_ids?: number[];
      billing_cycle: "monthly" | "yearly";
      platforms?: string[];
    },
  ) {
    return apiRequest<unknown>("/client/app-creation/quote", {
      method: "POST",
      token,
      body: payload,
    });
  },

  async contract(token: string) {
    return apiRequest<unknown>("/client/app-creation/contract", {
      method: "POST",
      token,
    });
  },
};
