import { notFound } from 'next/navigation';
import { redirect } from 'next/navigation';
import { FunnelDefinition } from '@/lib/funnel/types';
import { BAKED_FUNNELS } from '@/lib/funnel/bakedFunnels';
import { env } from '@/lib/env';

// Функция для загрузки воронки из базы данных
async function loadFunnelFromDatabase(funnelId: string): Promise<FunnelDefinition | null> {
  // В production режиме база данных недоступна
  if (typeof window !== 'undefined') {
    return null;
  }

  try {
    // Пытаемся загрузить из базы данных через API
    const response = await fetch(`${env.NEXT_PUBLIC_BASE_URL}/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 Object.keys(BAKED_FUNNELS).map((funnelId) => ({ funnelId }));
}

interface FunnelRootPageProps {
  params: Promise<{
    funnelId: string;
  }>;
  searchParams: Promise<{ [key: string]: string | string[] | undefined }>;
}

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

  let funnel: FunnelDefinition | null = null;

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

  // Если не найдено в базе, пытаемся загрузить из JSON файлов
  if (!funnel) {
    funnel = BAKED_FUNNELS[funnelId] || null;
  }

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

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

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

  // Сохраняем query параметры при редиректе
  const queryString = new URLSearchParams(
    Object.entries(queryParams).reduce((acc, [key, value]) => {
      if (value !== undefined) {
        acc[key] = Array.isArray(value) ? value[0] : value;
      }
      return acc;
    }, {} as Record<string, string>)
  ).toString();

  const redirectUrl = queryString 
    ? `/${funnel.meta.id}/${firstScreenId}?${queryString}`
    : `/${funnel.meta.id}/${firstScreenId}`;

  redirect(redirectUrl);
}
