"use server";

import { ServerAction } from "@/lib/actions";
import { encrypt } from "@/lib/encryption";
import { generatePassword } from "@/lib/password";
import { ServerResponse } from "@/lib/actions";
import compilers from "@/models/email";
import { ResultSetHeader } from "mysql2";
import { sendMail } from "../nodemailer";

export default async function resetPassword(formData: FormData) {
  const { error, con, dict } = await ServerAction();

  if (error) {
    return ServerResponse({
      operation: false,
      data: error,
    });
  }

  try {
    const id = formData.get("id");
    const email = formData.get("email");
    const password = generatePassword(8);
    const encrypted = await encrypt(password);

    const [result] = await con.query<ResultSetHeader>(
      `
    UPDATE USERS
    SET
      PASSWORD = ?
    WHERE ID = ?   
    `,
      [encrypted, id],
    );

    if (result.affectedRows === 0) {
      return ServerResponse({
        operation: false,
        message: dict.alerts.reset_password.error,
      });
    }

    await sendMail({
      subject: "Password Reset",
      toEmail: email as string,
      optText: compilers.reset_password({ email, password }),
    });

    return ServerResponse({
      operation: true,
      message: dict.alerts.reset_password.success,
    });
  } catch (error) {
    return ServerResponse({
      operation: true,
      message: dict.alerts.general.unexpected_error,
      data: error,
    });
  } finally {
    con.release();
  }
}
