import { createCoreAPIClient } from "@/lib/features/coreClient";
import type { CoreResponse } from "@/lib/features/types";
import type {
  PromoCode,
  PromoAccessList,
  PromoReward,
  SignupPromoCodeForm,
} from "./types";

const coreClient = createCoreAPIClient();

export interface CreatePromoCodePayload {
  name: string;
  isActive: boolean;
  note?: string;
  code: string;
  expiresAt?: string;
  description?: string;
  rewards: PromoReward[];
  access_list: PromoAccessList;
  signupPromoCodes?: SignupPromoCodeForm[];
}

export type UpdatePromoCodePayload = Partial<CreatePromoCodePayload>;

export async function createPromoCode(
  payload: CreatePromoCodePayload,
): Promise<CoreResponse<PromoCode>> {
  return await coreClient<PromoCode>("/v1/admin-console/promo-codes", {
    method: "POST",
    body: JSON.stringify(payload),
  });
}

export async function updatePromoCode(
  id: string,
  payload: UpdatePromoCodePayload,
): Promise<CoreResponse<PromoCode>> {
  return await coreClient<PromoCode>(`/v1/admin-console/promo-codes/${id}`, {
    method: "PATCH",
    body: JSON.stringify(payload),
  });
}

export async function deletePromoCode(id: string): Promise<CoreResponse<any>> {
  return await coreClient<any>(`/v1/admin-console/promo-codes/${id}`, {
    method: "DELETE",
  });
}
