/**
 * 订阅 API 模块
 * 对接后端订阅管理接口
 */
import apiClient from "./client";

/** 套餐类型 */
export type PlanType = "free" | "standard" | "pro" | "enterprise";

/** 订阅状态 */
export type SubscriptionStatus = "active" | "expired" | "cancelled" | "trial";

/** 账单状态 */
export type BillingStatus = "paid" | "pending" | "failed" | "refunded";

/** 计费周期 */
export type BillingCycle = "monthly" | "yearly";

/** 套餐信息 */
export interface Plan {
  id: PlanType;
  name: string;
  price: number | null;
  yearly_price?: number | null;
  description: string;
  recommended: boolean;
  features: string[];
}

/** 当前订阅信息 */
export interface SubscriptionInfo {
  id: string;
  plan_id: PlanType;
  plan_name: string;
  status: SubscriptionStatus;
  billing_cycle: BillingCycle;
  current_period_start: string;
  current_period_end: string;
  amount: number;
  auto_renew: boolean;
  created_at: string;
}

/** 账单记录 */
export interface BillingRecord {
  id: string;
  plan_name: string;
  amount: number;
  billing_cycle: BillingCycle;
  status: BillingStatus;
  payment_method: string;
  created_at: string;
  invoice_url?: string;
}

/** 升级/降级请求 */
export interface ChangePlanRequest {
  target_plan_id: PlanType;
  billing_cycle: BillingCycle;
}

/** 升级/降级响应 */
export interface ChangePlanResponse {
  success: boolean;
  message: string;
  new_subscription?: SubscriptionInfo;
}

// ============ API 函数 ============

/** 获取当前订阅信息 */
export const getCurrentSubscription = async (): Promise<SubscriptionInfo> => {
  const response = await apiClient.get("/subscription/current");
  return response.data;
};

/** 获取账单记录列表 */
export const getBillingRecords = async (): Promise<BillingRecord[]> => {
  const response = await apiClient.get("/subscription/billing-records");
  return response.data;
};

/** 升级/降级套餐 */
export const changePlan = async (
  request: ChangePlanRequest,
): Promise<ChangePlanResponse> => {
  const response = await apiClient.post("/subscription/change-plan", request);
  return response.data;
};

/** 取消订阅 */
export const cancelSubscription = async (): Promise<{
  success: boolean;
  message: string;
}> => {
  const response = await apiClient.post("/subscription/cancel");
  return response.data;
};

/** 切换自动续费 */
export const toggleAutoRenew = async (
  enabled: boolean,
): Promise<{ success: boolean; message: string }> => {
  const response = await apiClient.post("/subscription/toggle-auto-renew", {
    enabled,
  });
  return response.data;
};
