import { notFound, redirect } from "next/navigation";

import {
  listBakedFunnelIds,
  peekBakedFunnelDefinition,
} from "@/lib/funnel/loadFunnelDefinition";
import type { FunnelDefinition } from "@/lib/funnel/types";
import { IS_FULL_SYSTEM_BUILD } from "@/lib/runtime/buildVariant";

// Функция для загрузки воронки из базы данных
async function loadFunnelFromDatabase(funnelId: string): Promise<FunnelDefinition | null> {
  if (!IS_FULL_SYSTEM_BUILD) {
    return null;
  }

  try {
    // Пытаемся загрузить из базы данных через API
    const response = await fetch(`${process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000'}/api/funnels/by-funnel-id/${funnelId}`, {
      cache: 'no-store' // Не кешируем, т.к. воронки могут обновляться
    });
    
    if (response.ok) {
      return await response.json();
    }
    
    return null;
  } catch (error) {
    console.error(`Failed to load funnel '${funnelId}' from database:`, error);
    return null;
  }
}

export const dynamic = "force-dynamic"; // Изменено на dynamic для поддержки базы данных

export function generateStaticParams() {
  // Генерируем только для статических JSON файлов
  return listBakedFunnelIds().map((funnelId) => ({ funnelId }));
}

interface FunnelRootPageProps {
  params: Promise<{
    funnelId: string;
  }>;
}

export default async function FunnelRootPage({ params }: FunnelRootPageProps) {
  const { funnelId } = await params;

  let funnel: FunnelDefinition | null = null;

  // Сначала пытаемся загрузить из базы данных
  funnel = await loadFunnelFromDatabase(funnelId);

  // Если не найдено в базе, пытаемся загрузить из JSON файлов
  if (!funnel) {
    try {
      funnel = peekBakedFunnelDefinition(funnelId);
    } catch (error) {
      console.error(`Failed to load funnel '${funnelId}' from files:`, error);
    }
  }

  // Если воронка не найдена ни в базе, ни в файлах
  if (!funnel) {
    notFound();
  }

  const firstScreenId =
    funnel.meta.firstScreenId ?? funnel.screens.at(0)?.id ?? "";

  if (!firstScreenId) {
    redirect("/");
  }

  redirect(`/${funnel.meta.id}/${firstScreenId}`);
}
