import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export function middleware(req: NextRequest) {
  const path = req.nextUrl.pathname;

  // Public routes that don't require authentication
  const publicPaths = [
    '/',
    '/pricing',
    '/faq',
    '/blog',
    '/login',
    '/signup',
    '/privacy',
    '/newsletter',
  ];

  // Check if path is public
  const isPublicPath = publicPaths.some(p => path === p || path.startsWith(p + '/'));

  // Allow API routes
  if (path.startsWith('/api/')) {
    return NextResponse.next();
  }

  // Allow redirect routes (QR code redirects)
  if (path.startsWith('/r/')) {
    return NextResponse.next();
  }

  // Allow static files
  if (path.includes('.') || path.startsWith('/_next')) {
    return NextResponse.next();
  }

  // Allow public paths
  if (isPublicPath) {
    return NextResponse.next();
  }

  // For protected routes, check for userId cookie
  const userId = req.cookies.get('userId')?.value;

  if (!userId) {
    // Not authenticated - redirect to signup
    const signupUrl = new URL('/signup', req.url);
    return NextResponse.redirect(signupUrl);
  }

  // Authenticated - allow access
  return NextResponse.next();
}

export const config = {
  matcher: [
    /*
     * Match all request paths except for the ones starting with:
     * - _next/static (static files)
     * - _next/image (image optimization files)
     * - favicon.ico (favicon file)
     * - public folder
     */
    '/((?!_next/static|_next/image|favicon.ico|logo.svg|og-image.png).*)',
  ],
};