import createMiddleware from 'next-intl/middleware';
import { locales } from './i18n';
import { NextRequest, NextResponse } from 'next/server';

// Routes nécessitant une authentification
const PROTECTED_PATHS = ['/admin']

console.log('========================================');
console.log('[Proxy] ===== PROXY MODULE LOADED =====');
console.log('[Proxy] Available locales:', locales);
console.log('[Proxy] Default locale: fr');
console.log('[Proxy] Locale prefix: always');
console.log('[Proxy] ========================================');

const intlMiddleware = createMiddleware({
  // Liste des locales supportées
  locales,
  
  // Locale par défaut
  defaultLocale: 'fr',
  
  // Toujours utiliser le préfixe de locale pour éviter les problèmes
  localePrefix: 'always'
});

export default function middleware(request: NextRequest) {
  const pathname = request.nextUrl.pathname;
  const searchParams = request.nextUrl.searchParams.toString();
  const fullUrl = request.url;
  const method = request.method;
  const headers = Object.fromEntries(request.headers.entries());
  
  console.log('========================================');
  console.log('[Proxy] ===== MIDDLEWARE EXECUTED =====');
  console.log('[Proxy] Timestamp:', new Date().toISOString());
  console.log('[Proxy] Method:', method);
  console.log('[Proxy] Pathname:', pathname);
  console.log('[Proxy] Search params:', searchParams || '(none)');
  console.log('[Proxy] Full URL:', fullUrl);
  console.log('[Proxy] User-Agent:', headers['user-agent']?.substring(0, 50) || '(none)');
  console.log('[Proxy] Accept-Language:', headers['accept-language'] || '(none)');
  console.log('[Proxy] Referer:', headers['referer'] || '(none)');
  
  // Si c'est la route racine, rediriger vers /fr
  if (pathname === '/') {
    console.log('[Proxy] ⚠️  ROOT PATH DETECTED - Redirecting to /fr');
    const url = request.nextUrl.clone();
    url.pathname = '/fr';
    const redirectUrl = url.toString();
    console.log('[Proxy] Redirect URL:', redirectUrl);
    console.log('[Proxy] ========================================');
    return NextResponse.redirect(url, 307);
  }
  
  // Si la route ne commence pas par une locale, rediriger vers /fr + route
  const pathSegments = pathname.split('/').filter(Boolean);
  const firstSegment = pathSegments[0];
  
  if (firstSegment && !locales.includes(firstSegment as any)) {
    // C'est une route sans locale, rediriger vers /fr + route
    console.log('[Proxy] ⚠️  ROUTE WITHOUT LOCALE DETECTED');
    console.log('[Proxy] Original pathname:', pathname);
    console.log('[Proxy] First segment:', firstSegment);
    const url = request.nextUrl.clone();
    url.pathname = `/fr${pathname}`;
    console.log('[Proxy] Redirecting to:', url.pathname);
    console.log('[Proxy] ========================================');
    return NextResponse.redirect(url, 307);
  }
  
  // Protection des routes admin
  const pathWithoutLocale = '/' + pathSegments.slice(1).join('/')
  const isProtected = PROTECTED_PATHS.some(p => pathWithoutLocale === p || pathWithoutLocale.startsWith(p + '/'))
  if (isProtected) {
    const token = request.cookies.get('sar_token')?.value
    if (!token) {
      const url = request.nextUrl.clone()
      const locale = locales.includes(pathSegments[0] as any) ? pathSegments[0] : 'fr'
      url.pathname = `/${locale}`
      console.log('[Proxy] ⛔ Admin route sans token, redirection vers', url.pathname)
      return NextResponse.redirect(url)
    }
  }

  console.log('[Proxy] Calling intlMiddleware...');
  const response = intlMiddleware(request);
  
  if (response) {
    const responseStatus = response.status;
    const responseUrl = response.url;
    const responseHeaders = Object.fromEntries(response.headers.entries());
    const responseType = response.type;
    
    console.log('[Proxy] ✓ Response received from intlMiddleware');
    console.log('[Proxy] Response status:', responseStatus);
    console.log('[Proxy] Response type:', responseType);
    console.log('[Proxy] Response URL:', responseUrl);
    console.log('[Proxy] Response headers count:', Object.keys(responseHeaders).length);
    
    // Log des headers importants
    if (responseHeaders['location']) {
      console.log('[Proxy] → Location header:', responseHeaders['location']);
    }
    if (responseHeaders['x-middleware-rewrite']) {
      console.log('[Proxy] → Rewrite header:', responseHeaders['x-middleware-rewrite']);
    }
    if (responseHeaders['x-middleware-redirect']) {
      console.log('[Proxy] → Redirect header:', responseHeaders['x-middleware-redirect']);
    }
  } else {
    console.log('[Proxy] ✗ No response from intlMiddleware');
  }
  
  console.log('[Proxy] ========================================');
  return response;
}

export const config = {
  // Matcher pour toutes les routes sauf les fichiers statiques et les routes API
  matcher: ['/((?!api|_next|_vercel|.*\\..*).*)']
};

