import { apiClient } from "../../app/api/client";
import { handleAPIError } from "../utils/apiErrorHandler";

export interface PaymentPageContent {
  checkout?: {
    heading?: string;
    payButtonText?: string;
    saveMyCardText?: string;
    setupButtonText?: string;
    enrollmentConfirmationText?: string;
    enrollmentConfirmationHeading?: string;
  };
  thankyou?: {
    ageLabel?: string;
    greetingText?: string;
    ctaButtonText?: string;
    locationLabel?: string;
    childNameLabel?: string;
    classTimeLabel?: string;
    startDateLabel?: string;
    instructorLabel?: string;
    classRegisteredText?: string;
    paymentConfirmingText?: string;
    paymentProcessingText?: string;
  };
}

export interface PaymentPageData {
  id: string;
  title: string;
  slug: string;
  status: string;
  content: PaymentPageContent;
  translated_content?: PaymentPageContent;
}

export interface PaymentPageResponse {
  status: boolean;
  message: string;
  data: PaymentPageData;
  tenant: any;
}

export interface PaymentPageDataWithTranslations {
  default: PaymentPageContent;
  translated?: PaymentPageContent;
}

export class PaymentPageService {
  private readonly endpoint = "pages/payment";

  async getPaymentPageData(domain: string, language?: string, franchiseeId?: string | null): Promise<PaymentPageDataWithTranslations | null> {
    const startTime = Date.now();
    try {
      const params: Record<string, string> = {};
      if (language && language !== "default") {
        params.lang = language;
      }
      if (franchiseeId) {
        params.franchiseeId = franchiseeId;
      }

      const response = await apiClient.get<PaymentPageResponse>(this.endpoint, {
        headers: { "X-Domain": domain },
        params: Object.keys(params).length > 0 ? params : undefined,
      });

      if (!response.data?.status || !response.data?.data) {
        return null;
      }

      const rawData = response.data.data;
      
      return {
        default: rawData.content || {},
        translated: rawData.translated_content || undefined,
      };
    } catch (error) {
      return handleAPIError(error, "PaymentPageService", startTime, () => null);
    }
  }
}

export const paymentPageService = new PaymentPageService();
