import { db } from "@/lib/db";
import NextAuth from "next-auth"
import { DrizzleAdapter } from "@auth/drizzle-adapter";
import type { Provider } from "next-auth/providers";
import { eq } from "drizzle-orm";
import { users } from "@/schema/users";
import { accounts, sessions, verificationTokens } from "@/schema/auth-tables";
{{pkStrategyImport}}
{{importsCode}}

const adapter = {
  ...DrizzleAdapter(db, {
    usersTable: users,
    accountsTable: accounts,
    sessionsTable: sessions,
    verificationTokensTable: verificationTokens,
  }),
  createUser: async (data: any) => {
    const newUser = {
      {{pkKeyValTemplate}}
      email: data.email,
      name: data.name,
      image: data.image,
      emailVerified: data.emailVerified,
      role: "user"
    };

    await db.insert(users).values(newUser);
    return newUser;
  },
};

const providers: Provider[] = [
{{providersCode}}
]

export const { handlers, auth, signIn, signOut } = NextAuth({
  adapter: adapter,
  session: {
    strategy: "jwt",
  },
  providers,
  pages: {
    signIn: "/signin",
  },
  callbacks: {
    jwt({ token, user }) {
      if (user) {
        token.id = user.id as string;
        token.role = user.role as string;
      }
      return token;
    },
    session({ session, token }) {
      session.user.id = token.id as string;
      session.user.role = token.role as string;
      return session;
    },
  },
})