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

export function proxy(request: NextRequest) {
    // Define public paths that don't require authentication
    const publicPaths = [
        '/login',
        '/api/auth/login',
        '/_next',
        '/favicon.ico',
        '/manifest.json',
    ];

    const path = request.nextUrl.pathname;

    // Check if the path is public
    // We use startsWith to cover subpaths if necessary, but strictly usually better for pages
    // For _next, startsWith is correct. For /login, exact match is better unless we have nested public routes.
    // Let's use exact match for explicit pages and startsWith for assets/api
    const isPublicPath =
        path === '/login' ||
        path === '/api/auth/login' ||
        path === '/favicon.ico' ||
        path === '/manifest.json' ||
        path.startsWith('/_next');

    // Check for auth token
    const authToken = request.cookies.get('auth-token');

    // If validated (has token) and trying to access login, redirect to home
    if (authToken && path === '/login') {
        return NextResponse.redirect(new URL('/', request.url));
    }

    // If protected and no token, redirect to login
    if (!isPublicPath && !authToken) {
        const loginUrl = new URL('/login', request.url);
        // loginUrl.searchParams.set('from', path); // We can implement return url later
        return NextResponse.redirect(loginUrl);
    }

    return NextResponse.next();
}

export const config = {
    matcher: [
        /*
         * Match all request paths except for the ones starting with:
         * - api (API routes, except auth/login which is handled inside middleware)
         * - _next/static (static files)
         * - _next/image (image optimization files)
         * - favicon.ico (favicon file)
         */
        '/((?!_next/static|_next/image|favicon.ico).*)',
    ],
};
