import NextAuth from "next-auth";
import CredentialsProvider from "next-auth/providers/credentials";
import fs from "fs";
import path from "path";
import { Anybody } from "next/font/google";

function getUsers() {
    try {
        const filePath = path.join(process.cwd(), "src/data/users.json");
        if (!fs.existsSync(filePath)) return [];
        return JSON.parse(fs.readFileSync(filePath, "utf8"));
    } catch (e) {
        return [];
    }
}

const handler = NextAuth({
    providers: [
        CredentialsProvider({
            name: "Dreinet Admin",
            credentials: {
                username: { label: "Email", type: "text" },
                password: { label: "Password", type: "password" }
            },
            async authorize(credentials) {
                var u: any;
                const users = getUsers();
                const user = users.find(u => u.email === credentials?.username && u.password === credentials?.password);

                if (user) {
                    return {
                        id: user.id,
                        name: user.name,
                        email: user.email,
                        role: user.role
                    };
                }
                return null;
            }
        })
    ],
    secret: process.env.NEXTAUTH_SECRET || "dreinet-fallback-secret-123",
    pages: {
        signIn: '/admin',
    },
    callbacks: {
        async jwt({ token, user }) {
            if (user) {
                token.role = (user as any).role;
            }
            return token;
        },
        async session({ session, token }) {
            if (session.user) {
                (session.user as any).role = token.role;
                (session.user as any).id = token.sub;
            }
            return session;
        },
    },
});

export { handler as GET, handler as POST };
