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

export interface WorkshopBannerStats {
  number: string;
  label: string;
}

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

export interface WorkshopSection {
  heading?: string;
  mainHeading?: string;
  ctaButtonText?: string;
  sliders?: string; // JSON stringified array
  showMoreText?: string;
}

export interface WorkshopContent {
  banner?: WorkshopBanner;
  allProgram?: WorkshopSection;
  whyWorkshop?: WorkshopSection;
  bottomSliders?: any;
}

export interface WorkshopData {
  id: string;
  franchisee_id?: string | null;
  is_global: boolean;
  title: string;
  slug: string;
  template_id: string;
  status: string;
  content: WorkshopContent;
  translated_content?: WorkshopContent;
  seo_title?: string;
  seo_description?: string;
  created_at: string;
  updated_at: string;
}

export interface WorkshopDataWithTranslations {
  default: WorkshopContent;
  translated?: WorkshopContent;
}

// ========== NEW TYPES FOR ACTIVITIES API ==========
export interface ActivityCtaButton {
  text: string | null;
  url: string | null;
}

export interface ActivityDetails {
  tag: string | null;
  activity_name: string | null;
  activity_heading: string;
  activity_description: string;
  created_for: string;
  ideal_for_text: string | null;
  age: string;
  age_text: string | null;
  grade: string | null;
  grade_text: string | null;
  duration: string;
  duration_heading: string | null;
  duration_text: string | null;
  image: string | null;
  cta_button: ActivityCtaButton;
}

export interface WorkshopHighlightItem {
  title: string;
  description: string;
}

export interface WorkshopDetailsSection {
  heading: string;
  items?: string[] | WorkshopHighlightItem[];
  points?: string[];
  text?: string;
}

export interface WorkshopDetails {
  objectives: WorkshopDetailsSection;
  action_text: {
    title: string | null;
    text: string | null;
  };
  discover_section: {
    heading: string | null;
    points: string[];
  };
  workshop_highlights: {
    heading: string | null;
    items: WorkshopHighlightItem[];
  };
  sliders?: {
    sliderImages: string[];
    reverseSliderImages: string[];
  };
  slider_texts?: string[];
}

export interface Activity {
  id: string;
  franchisee_id: string;
  title: string;
  parent_activities_id: string | null;
  is_global: boolean;
  status: string;
  order_no: number;
  created_at: string;
  updated_at: string;
  deleted_at: string | null;
  language: string;
  slug: string;
  activity_icon?: string | null;
  activity_details: ActivityDetails;
  workshop_details: WorkshopDetails;
}

export interface ActivitiesResponse {
  status: boolean;
  message: string;
  data: Activity[];
}

export class WorkshopService {
  private readonly endpoint = "pages/workshops";
  private readonly activitiesEndpoint = "activities";

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

  async fetchActivitiesByDomain(
    domain: string,
    franchiseeId?: string | null,
    language?: string | null
  ): Promise<Activity[]> {
    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<ActivitiesResponse>(
        this.activitiesEndpoint,
        {
          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.sort((a, b) => a.order_no - b.order_no);
    } catch (error) {
      return handleAPIError(error, domain, startTime, () => []);
    }
  }

  private async getDefaultData(): Promise<WorkshopDataWithTranslations> {
    return {
      default: {
        banner: {
          stats: JSON.stringify([
            { number: "Global Impact", label: "Inspiring Learners Worldwide" },
            { number: "STEM Focus", label: "Engineering, Coding & Innovation" },
            { number: "Recognition", label: "Officially recognized by EU & Harvard" },
          ]),
          ctaLink: "#allWorkshop",
          ctaText: "discover programs",
          heading: "Workshops",
          subHeading: "Whether you're 5 or 55+, build, learn, and connect through engineering, coding, and creative challenges.",
        },
        allProgram: {
          heading: "All YE Workshops",
        },
        whyWorkshop: {
          mainHeading: "Why Workshops with YE",
          ctaButtonText: "discover programs",
          sliders: JSON.stringify([
            {
              sliderHeading: "All Ages Welcome",
              title: "All ages are welcome to participate",
              description: "From early learners to seniors and corporate teams — we design workshops that are meaningful, fun, and challenging for every age group.",
            },
            {
              sliderHeading: "Hands-On Experience",
              title: "Hands-On Experience",
              description: "Participants don't just listen — they build real models, tinker, code, iterate and experiment side by side. This practical approach sparks curiosity and helps ideas come to life in exciting, tangible ways.",
            },
            {
              sliderHeading: "Tailored for Every Audience",
              title: "Tailored for Every Audience",
              description: "Workshops for children, family & parent-child days, corporate teambuilding, programs for older adults and special needs groups. Each format is carefully customized to ensure an engaging and inclusive experience for every participant.",
            },
            {
              sliderHeading: "Social & Collaborative Learning",
              title: "Social & Collaborative Learning",
              description: "Every workshop fosters teamwork, communication and shared discovery. Through collaboration, participants learn to solve problems creatively and celebrate success together.",
            },
            {
              sliderHeading: "Expert Facilitation & All Materials Included",
              title: "Expert Facilitation & All Materials Included",
              description: "We bring the kits, tools, instructions — you bring curiosity. Our certified instructors guide every session, ensuring a smooth, inspiring, and memorable learning experience.",
            },
          ]),
        },
      },
    };
  }
}

export const workshopService = new WorkshopService();
