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

export interface HomepageData {
  banner?: any;
  program?: any;
  discoverSection?: any;
  whyYoungEngineers?: any;
  joinFirstFreeClass?: any;
  testimonialsSection?: any;
  additionalActivities?: any;
  sliderTexts?: any;
  videoSlider?: any;
  bottomSliders?: any;
}

export interface HomepageDataWithTranslations {
  default: HomepageData;
  translated?: HomepageData | any[];
}

export class HomepageService {
  private readonly endpoint = "pages/home";

  async fetchByDomain(domain: string, franchiseeId?: string | null, language?: string): Promise<HomepageDataWithTranslations> {
    const startTime = Date.now();

    try {
      const params: Record<string, string> = {};
      if (franchiseeId) params.franchiseeId = franchiseeId;
      if (language && language !== "default") params.lang = language;

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

      if (!response.data?.status || !response.data?.data?.content) {
        return this.getDefaultData();
      }

      return {
        default: response.data.data.content,
        translated: response.data.data.translated_content || undefined,
      };
    } catch (error) {
      return handleAPIError(error, domain, startTime, this.getDefaultData.bind(this));
    }
  }

  private async getDefaultData(): Promise<HomepageDataWithTranslations> {
    try {
      const staticData = await import("@/src/data/home.json");
      return { default: staticData.default };
    } catch (error) {
      console.error("[HomepageService] Failed to load default data:", error);
      return { default: {} };
    }
  }
}

export const homepageService = new HomepageService();
