import { AxiosError } from "axios";
import { apiClient } from "../../app/api/client";
import { handleAPIError } from "../utils/apiErrorHandler";
import {
  Teacher,
  TeachersResponse,
  ProcessedTeacher,
} from "@/src/lib/types/home";

// Fallback used when a teacher has no uploaded profile photo.
export const DEFAULT_TEACHER_IMAGE =
  "https://yefranchisees.b-cdn.net/frontend/teachers/photo%20(1)%20(2).png";

export class TeachersService {
  private readonly endpoint = "teachers";

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

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

      const response = await apiClient.get<TeachersResponse>(this.endpoint, {
        headers: { "X-Domain": domain },
        params: franchiseeId ? params : undefined,
      });

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

      // Process teachers to include experienceYears mapping
      const processedTeachers: ProcessedTeacher[] = response.data.data
        .sort((a, b) => a.order_no - b.order_no)
        .map((teacher) => ({
          ...teacher,
          profile_image: teacher.profile_image?.trim()
            ? teacher.profile_image
            : DEFAULT_TEACHER_IMAGE,
          experienceYears: teacher.experience,
        }));

      const elapsed = Date.now() - startTime;

      return processedTeachers;
    } catch (error) {
      // Delegate error handling to reusable utility
      return handleAPIError(error, domain, startTime, () => []);
    }
  }
}

export const teachersService = new TeachersService();
