import { NextRequest, NextResponse } from 'next/server'

const PUBLIC_FILE = /.(.*)$/

export function middleware(req: NextRequest) {
    const pathname = req.nextUrl.pathname
    const signedIn = req.cookies['drift-token']
    const getURL = (pageName: string) => new URL(`/${pageName}`, req.url).href
    const isPageRequest =
        !PUBLIC_FILE.test(req.nextUrl.pathname) &&
        !req.nextUrl.pathname.startsWith('/api') &&
        // header added when next/link pre-fetches a route
        !req.headers.get('x-middleware-preflight')

    if (!req.headers.get('x-middleware-preflight') && pathname === '/signout') {
        // If you're signed in we remove the cookie and redirect to the home page
        // If you're not signed in we redirect to the home page
        if (signedIn) {
            const resp = NextResponse.redirect(getURL(''));
            resp.clearCookie('drift-token');
            resp.clearCookie('drift-userid');

            return resp
        }
    } else if (isPageRequest) {
        if (pathname === '/') {
            if (signedIn) {
                return NextResponse.redirect(getURL('new'))
            }
            // If you're not signed in we redirect the new post page to the home page
        } else if (pathname === '/new') {
            if (!signedIn) {
                return NextResponse.redirect(getURL('signin'))
            }
            // If you're signed in we redirect the sign in page to the home page (which is the new page)
        } else if (pathname === '/signin' || pathname === '/signup') {
            if (signedIn) {
                return NextResponse.redirect(getURL(''))
            }
        }
    }

    return NextResponse.next()
}