import {hash} from 'bcrypt';
import {generateSession} from "~/server/utils/generateSession";
import prisma from "~/lib/prisma";
import {EventHandlerRequest, H3Event} from "h3";

export default defineEventHandler(async (event: H3Event<EventHandlerRequest>) => {
    const userExists = await prisma.user.count();
    if (userExists) {
        throw createError({statusCode: 403, statusMessage: 'User already exists'});
    }

    const {email, name, password} = await readBody(event);

    if ((!/[A-Z]/.test(password) || !/[a-z]/.test(password) || !/[0-9]/.test(password) || !/[^A-Za-z0-9]/.test(password)) && process.env.NODE_ENV !== 'development') {
        return new Response('Password must contain at least one uppercase letter, one lowercase letter, one number, and one special character', {
            status: 422,
        });
    }

    const hashedPassword = await hash(password, 10);

    const user = await prisma.user.create({
        data: {
            email,
            name,
            password: hashedPassword,
        },
    });

    await generateSession(user, event);

    return {
        id: user.id,
        email: user.email,
        name: user.name,
    };
});