import NextAuth from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import { NextAuthOptions } from "next-auth";




const authOptions: NextAuthOptions = {
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID!,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
      authorization: {
        params: {
          prompt: "consent",
          access_type: "offline",
          response_type: "code",
        },
      },
    }),
  ],
  secret: process.env.NEXTAUTH_SECRET,
  debug: process.env.NODE_ENV === "development",
  callbacks: {
    async signIn({ user, account, profile }) {
      if (account?.provider === "google") {
        // Here you can add custom logic for handling Google sign-in
        // For example, saving user to your database
        if (process.env.NODE_ENV === "development") {
          console.log("Google sign-in callback completed");
        }
        return true;
      }
      return true;
    },
    async jwt({ token, account, user }) {
      if (account) {
        token.accessToken = account.access_token;
        token.provider = account.provider;
      }
      return token;
    },
    async session({ session, token }) {
      // Send properties to the client
      session.accessToken = token.accessToken as string;
      session.provider = token.provider as string;
      return session;
    },
    async redirect({ url, baseUrl }) {
      // Always redirect to your custom callback URL
      // Handle both localhost and production URLs
      const callbackUrl = "/google-login";
      
      // If url is a relative path, just return it
      if (url.startsWith("/")) return url;
      
      // If url contains the baseUrl, allow it
      if (url.startsWith(baseUrl)) return url;
      
      // Default to callback URL
      return callbackUrl;
    },
  },
  pages: {
    signIn: "/auth/signup", // Custom sign-in page
    error: "/auth/signup", // Error code passed in query string as ?error=
  },
  session: {
    strategy: "jwt",
  },
};

const handler = NextAuth(authOptions);

export { handler as GET, handler as POST };
