import type { NextRequest } from 'next/server';
import { NextResponse } from 'next/server';
import { isNoIndexHost, isNoIndexPath } from '@/lib/searchIndexing';

export function proxy(request: NextRequest) {
  const requestHost =
    request.headers.get('x-forwarded-host') ||
    request.headers.get('host') ||
    request.nextUrl.hostname;
  const hostname = requestHost.split(':')[0].toLowerCase();
  const port = requestHost.includes(':') ? requestHost.split(':').at(-1) : request.nextUrl.port;
  const isStandardWebPort = !port || port === '80' || port === '443';
  const forwardedProto = request.headers.get('x-forwarded-proto') || request.nextUrl.protocol.replace(':', '');

  if (/\/{2,}/.test(request.nextUrl.pathname)) {
    const url = request.nextUrl.clone();
    url.pathname = request.nextUrl.pathname.replace(/\/{2,}/g, '/');
    return NextResponse.redirect(url, 308);
  }

  if (
    isStandardWebPort &&
    (hostname === 'www.cambridgeveritas.com' ||
      (hostname === 'cambridgeveritas.com' && forwardedProto !== 'https'))
  ) {
    const url = request.nextUrl.clone();
    url.protocol = 'https';
    url.hostname = 'cambridgeveritas.com';
    return NextResponse.redirect(url, 308);
  }

  const requestHeaders = new Headers(request.headers);
  requestHeaders.set('x-pathname', request.nextUrl.pathname);
  requestHeaders.set('x-request-url', request.url);

  const response = NextResponse.next({
    request: {
      headers: requestHeaders,
    },
  });

  if (isNoIndexHost(requestHost) || isNoIndexPath(request.nextUrl.pathname)) {
    response.headers.set('X-Robots-Tag', 'noindex, nofollow, noarchive');
  }

  return response;
}

export const config = {
  matcher: [
    '/((?!api|_next/static|_next/image|favicon\\.ico|tools/api|tools/_next/static|tools/_next/image).*)',
  ],
};
