// app/(lib)/services/saveCardService.ts
import { apiClient } from "../../app/api/client";
import { handleAPIError } from "../utils/apiErrorHandler";
import { extractDomain } from "../utils/domain";

export interface SaveCardRequest {
  payment_intent_id: string;
  gateway: string;
  save_card: boolean;
}

export interface SaveCardResponse {
  status: boolean;
  message: string;
  data?: any;
}

export class SaveCardService {
  private readonly endpoint = "save-card";

  async saveCard(request: SaveCardRequest): Promise<SaveCardResponse> {
    const startTime = Date.now();

    try {
      const domain = await extractDomain();
      

      const response = await apiClient.post<SaveCardResponse>(
        this.endpoint,
        request,
        {
          headers: { "X-Domain": domain },
        }
      );

      const elapsed = Date.now() - startTime;

      return response.data || { status: true, message: "Card saved successfully" };
    } catch (error) {
      console.error("[SaveCardService] Error saving card:", error);
      return handleAPIError(
        error,
        "save-card",
        startTime,
        () => ({
          status: false,
          message: "Failed to save card preference",
        })
      );
    }
  }
}

export const saveCardService = new SaveCardService();
