import serverError from "./serverError";
import parseDbResults from "./parseDbResults";
import connDbHandler from "../../utils/db/conn-db-handler";

type Param = {
    queryString: string;
    queryValuesArray?: string[];
    tableSchema?: import("../../types").DSQL_TableSchemaType;
    forceLocal?: boolean;
};

/**
 * # Read Only Db Handler with Varaibles
 * @returns
 */
export default async function varReadOnlyDatabaseDbHandler({
    queryString,
    queryValuesArray,
    tableSchema,
    forceLocal,
}: Param) {
    let results;

    const DB_CONN = forceLocal
        ? global.DSQL_DB_CONN
        : global.DSQL_READ_ONLY_DB_CONN || global.DSQL_DB_CONN;

    try {
        results = await connDbHandler(DB_CONN, queryString, queryValuesArray);
    } catch (error: any) {
        serverError({
            component: "varReadOnlyDatabaseDbHandler",
            message: error.message,
            noMail: true,
        });

        global.ERROR_CALLBACK?.(`VarReadOnlyDB Handler Error`, error as Error);

        return error.message;
    } finally {
        DB_CONN?.end();
    }

    if (results) {
        const unparsedResults = results;
        const parsedResults = await parseDbResults({
            unparsedResults: unparsedResults,
            tableSchema: tableSchema,
        });
        return parsedResults;
    } else {
        return null;
    }
}