import { ValidationError } from '../../../errors/index.js';
import { generatePasswordSaltHash } from './generatePasswordSaltHash.js';
export const registerLocalStrategy = async ({ collection, doc, password, payload, req, select })=>{
    const loginWithUsername = collection?.auth?.loginWithUsername;
    let whereConstraint;
    if (!loginWithUsername) {
        whereConstraint = {
            email: {
                equals: doc.email
            }
        };
    } else {
        whereConstraint = {
            or: []
        };
        if (doc.email) {
            whereConstraint.or.push({
                email: {
                    equals: doc.email
                }
            });
        }
        if (doc.username) {
            whereConstraint.or.push({
                username: {
                    equals: doc.username
                }
            });
        }
    }
    const existingUser = await payload.find({
        collection: collection.slug,
        depth: 0,
        limit: 1,
        pagination: false,
        req,
        where: whereConstraint
    });
    if (existingUser.docs.length > 0) {
        throw new ValidationError({
            collection: collection.slug,
            errors: [
                loginWithUsername ? {
                    message: req.t('error:usernameAlreadyRegistered'),
                    path: 'username'
                } : {
                    message: req.t('error:userEmailAlreadyRegistered'),
                    path: 'email'
                }
            ]
        });
    }
    const { hash, salt } = await generatePasswordSaltHash({
        collection,
        password,
        req
    });
    const sanitizedDoc = {
        ...doc
    };
    if (sanitizedDoc.password) {
        delete sanitizedDoc.password;
    }
    return payload.db.create({
        collection: collection.slug,
        data: {
            ...sanitizedDoc,
            hash,
            salt
        },
        req,
        select
    });
};

//# sourceMappingURL=register.js.map