/* eslint-disable @typescript-eslint/no-require-imports */
const { PrismaClient } = require('@prisma/client');
const { scrypt, randomBytes } = require('crypto');
const { promisify } = require('util');

const prisma = new PrismaClient();
const scryptAsync = promisify(scrypt);

async function hashPassword(password) {
    const salt = randomBytes(16).toString("hex");
    const derivedKey = await scryptAsync(password, salt, 64);
    return `${salt}:${derivedKey.toString("hex")}`;
}

async function main() {
    const password = process.argv[2] || process.env.INIT_DEFAULT_PASSWORD || "admin";
    console.log("Resetting password...");
    const hashedPassword = await hashPassword(password);
    const settings = await prisma.globalSettings.findFirst();

    if (settings) {
        await prisma.globalSettings.update({
            where: { id: settings.id },
            data: { password: hashedPassword }
        });
        console.log("Password reset successfully.");
    } else {
        await prisma.globalSettings.create({
            data: {
                id: "default",
                password: hashedPassword,
            },
        });
        console.log("Settings created with default password.");
    }
}

main()
    .catch(e => console.error(e))
    .finally(async () => await prisma.$disconnect());
