import { postServerLog } from "@/services/logs";
import { PoolConnection, createPool } from "mysql2/promise";
import poolConnection from "./pool";
import { DBEType } from "@/models/ErrorType";

const pool = createPool(poolConnection);

const getConnection = async (): Promise<PoolConnection | { error: string }> => {
  try {
    const con = await pool.getConnection();

    return con;
  } catch (error) {
    await postServerLog({ type: DBEType.ERROR, log: error });
    return { error: error.message };
  }
};

const beginTransaction = async (connection: PoolConnection): Promise<void> => {
  await connection.beginTransaction();
};

const commitTransaction = async (connection: PoolConnection): Promise<void> => {
  await connection.commit();
};

const rollbackTransaction = async (
  connection: PoolConnection,
): Promise<void> => {
  await connection.rollback();
};

const closeConnection = (connection: PoolConnection): void => {
  connection.release();
};

export {
  beginTransaction,
  closeConnection,
  commitTransaction,
  getConnection,
  rollbackTransaction,
};
