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

export interface Testimonial {
  id: string;
  parent_name: string;
  role: string;
  comment: string;
  order_no: number;
  language?: string;
}

export interface TestimonialsResponse {
  status: boolean;
  message: string;
  data: Testimonial[];
}

export class TestimonialsService {
  private readonly endpoint = "testimonial";

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

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

      const response = await apiClient.get<TestimonialsResponse>(
        this.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) {
      // Delegate error handling to reusable utility
      return handleAPIError(
        error,
        domain,
        startTime,
        () => []
      );
    }
  }
}

export const testimonialsService = new TestimonialsService();
