import { AxiosError } from "axios";
import { apiClient } from "../../app/api/client";
import { handleAPIError } from "../utils/apiErrorHandler";
import type { Program, ProgramsResponse } from "@/src/lib/types/programs";


export class ProgramsByAgeService {
  private readonly endpoint = "programs-by-age";

  /**
   * Extract age number from age string like "4 Years" -> "4"
   */
  private extractAgeNumber(ageString: string): string {
    const match = ageString.match(/\d+/);
    return match ? match[0] : ageString;
  }

  async fetchByAge(age: string, domain: string, franchiseeId?: string | null): Promise<Program[]> {
    const startTime = Date.now();

    try {
      const ageNumber = this.extractAgeNumber(age);
      const endpoint = `${this.endpoint}/${ageNumber}`;

      const params: Record<string, string> = {};
      if (franchiseeId) {
        params.franchiseeId = franchiseeId;
      }

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

      if (!response.data?.status || !Array.isArray(response.data?.data)) {
        return [];
      }

      const elapsed = Date.now() - startTime;

      return response.data.data;
    } catch (error) {
      return handleAPIError(
        error,
        `age-${age}`,
        startTime,
        () => []
      );
    }
  }
}

export const programsByAgeService = new ProgramsByAgeService();
