import mysql from "serverless-mysql";
import dotenv from "dotenv";

// needed to read the proper .env file, even when index.ts has it
dotenv.config();

type iResult = {
	affectedRows: number;
};

const config = process.env.armory_db_socket_path
	? {
			// socket path exists, production mode (linux)
			database: process.env.armory_db_name || "armory",
			user: process.env.armory_db_user || "root",
			password: process.env.armory_db_password || "",
			socketPath: process.env.armory_db_socket_path,
	  }
	: {
			// no socket path, development mode (windows)
			/* don't expose password or any sensitive info, done only for demo */
			host: process.env.armory_db_host || "localhost",
			database: process.env.armory_db_name || "armory",
			user: process.env.armory_db_user || "root",
			password: process.env.armory_db_password || "",
			port: 3306,
	  };

const db = mysql({ config });

export async function executeQuery({ query, values = "" }: { query: string; values?: string }): Promise<any> {
	try {
		const results = await db.query(query, values);
		await db.end();
		return results;
	} catch (error) {
		return { error };
	}
}

export function responseMessage(action: string, type: string, result: iResult) {
	let message = `No rows updated when trying to action ${action} on type ${type}`;

	if (result.affectedRows) {
		message = `${type} ${action} was successful`;
	}

	return { message };
}

export function failureMessage(action: string, type: string) {
	const message = `Error trying to ${action} on ${type}`;

	return { message };
}

// PATH: /etc/profile.d
// export varname=value
//
// startup status handled by update-rc.d (scriptname) defaults
