import type { NextAuthConfig } from 'next-auth';

export const authConfig = {
  pages: {
    signIn: '/login',
    newUser: '/register',
  },
  secret: process.env.NEXTAUTH_SECRET,
  trustHost: true,
  session: {
    strategy: 'jwt',
  },
  callbacks: {
    authorized({ auth, request: { nextUrl } }) {
      const isLoggedIn = !!auth?.user;
      const isAdmin = (auth?.user as any)?.role === 'ADMIN';
      const isDashboardPage = nextUrl.pathname === '/' ||
                             nextUrl.pathname.startsWith('/reminders') ||
                             nextUrl.pathname.startsWith('/archive') ||
                             nextUrl.pathname.startsWith('/trash') ||
                             nextUrl.pathname.startsWith('/settings') ||
                             nextUrl.pathname.startsWith('/lab') ||
                             nextUrl.pathname.startsWith('/agents') ||
                             nextUrl.pathname.startsWith('/chat') ||
                             nextUrl.pathname.startsWith('/canvas') ||
                             nextUrl.pathname.startsWith('/notebooks') ||
                             nextUrl.pathname.startsWith('/note/');
      const isAdminPage = nextUrl.pathname.startsWith('/admin');

      if (isAdminPage) {
        return isLoggedIn && isAdmin;
      }

      if (isDashboardPage) {
        if (isLoggedIn) return true;
        return false;
      } else if (isLoggedIn && (nextUrl.pathname === '/login' || nextUrl.pathname === '/register')) {
        return Response.redirect(new URL('/', nextUrl));
      }
      return true;
    },
    async jwt({ token, user }) {
      if (user) {
        token.id = user.id;
        token.role = (user as any).role;
      }
      return token;
    },
    async session({ session, token }) {
      if (token && session.user) {
        (session.user as any).id = token.id;
        (session.user as any).role = token.role;
      }
      return session;
    },
  },
  providers: [], 
} satisfies NextAuthConfig;