// app/(lib)/actions/workshopAction.ts
"use server";

import { workshopService } from "../services/workshopService";
import { extractDomain } from "../utils/domain";
import type { Activity, WorkshopDataWithTranslations } from "../services/workshopService";

interface ActionResponse<T> {
  success: boolean;
  data?: T;
  error?: string;
}

/**
 * Fetch workshop page content from API
 * Called once during SSR - data is passed down to all child components
 */
export async function getWorkshopPageDataAction(): Promise<ActionResponse<WorkshopDataWithTranslations>> {
  try {
    const domain = await extractDomain();

    // Interceptor auto-injects lang and franchiseeId
    const workshopPageData = await workshopService.fetchByDomain(domain);

    return {
      success: true,
      data: workshopPageData,
    };
  } catch (error) {
    console.error("[getWorkshopPageDataAction] Error:", error);
    return {
      success: false,
      error: "Failed to fetch workshop page data",
    };
  }
}

/**
 * Server action to fetch workshop data by domain (wrapper for backward compatibility or different response format)
 */
export async function fetchWorkshopByDomain(): Promise<ActionResponse<WorkshopDataWithTranslations>> {
  return getWorkshopPageDataAction();
}

/**
 * Server action to fetch workshop activities by domain
 * Supports manual language override if needed, but defaults to interceptor logic
 */
export async function fetchWorkshopActivities(
  languageOverride?: string | null
): Promise<ActionResponse<Activity[]>> {
  try {
    const domain = await extractDomain();

    // If there's an override, we pass it. Otherwise, service uses interceptor values.
    const activities = await workshopService.fetchActivitiesByDomain(domain, null, languageOverride);

    return {
      success: true,
      data: activities,
    };
  } catch (error) {
    console.error("[fetchWorkshopActivities] Error fetching activities:", error);
    return {
      success: false,
      data: [],
      error: "Failed to fetch workshop activities",
    };
  }
}
