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

export interface ProgramsPageBanner {
  stats?: string; // JSON stringified array
  ctaLink?: string;
  ctaText?: string;
  heading?: string;
  subHeading?: string;
  bannerImage?: string;
}

export interface ProgramsPageSection {
  heading?: string;
  ageRangeText?: string;
  ctaButtonText?: string;
  subHeading?: string;
  description?: string;
  showMoreText?: string;
  images?: string; // JSON stringified array
  imagesPreviews?: string; // JSON stringified array
}

export interface ProgramsPageContent {
  banner?: ProgramsPageBanner;
  program?: ProgramsPageSection;
  teacher?: ProgramsPageSection;
  allProgram?: ProgramsPageSection;
  inspiringMind?: ProgramsPageSection;
  bottomSliders?: any;
}

export interface ProgramsPageData {
  page_id: string;
  franchisee_id: string;
  title: string;
  is_global: boolean;
  slug: string;
  seo_title?: string;
  seo_description?: string;
  template: {
    id: string;
    name: string;
    slug: string;
  };
  status: string;
  content: ProgramsPageContent;
  translated_content?: ProgramsPageContent;
}

export interface ProgramsPageDataWithTranslations {
  default: ProgramsPageContent;
  translated?: ProgramsPageContent;
}

export class ProgramsPageService {
  private readonly endpoint = "pages/programs";

  async fetchByDomain(domain: string, franchiseeId?: string | null, language?: string): Promise<ProgramsPageDataWithTranslations> {
    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();
      }

      const elapsed = Date.now() - startTime;

      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<ProgramsPageDataWithTranslations> {
    return {
      default: {
        banner: {
          stats: "[]",
          ctaLink: "/programs",
          ctaText: "Discover Programs",
          heading: "Programs",
          subHeading: "Choose the perfect program for your child",
        },
        program: {
          heading: "Programs around you",
          ageRangeText: "Choose your child age",
          ctaButtonText: "View All programs",
        },
        teacher: {
          heading: "Meet our teachers",
        },
        allProgram: {
          heading: "ALL YE PROGRAMS",
          showMoreText: "See more",
        },
        inspiringMind: {
          heading: "INSPIRING YOUNG MINDS AROUND THE GLOBE",
          description: "Young Engineers offers interactive enrichment programs.",
          ctaButtonText: "Get free tickets",
        },
      },
    };
  }
}

export const programsPageService = new ProgramsPageService();
