/*--- IMPORT ---*/
import { db }     from '../common-config';
import { Client } from 'pg';
/*--- VARIABLES ---*/
/*--- QUERY-FUNCTIONS ---*/
const commonQuerySQL = async( sqlQuery: string, sqlVariables: any[] = [] ) => {
	const client = new Client( db );
	await client.connect();
	try {
		return await client.query( sqlQuery, sqlVariables ).then( async( resultQuery: any ) => {
			await client.end();
			return parseSQL( resultQuery );
		} );
	} finally {
		await client.end();
	}
};
const parseSQL       = ( resultSQL: any ): any => {
	const parsedFields: any = [];
	Object.entries( resultSQL.fields ).forEach( ( fieldItem: any ) => {
		parsedFields.push( fieldItem[ 1 ].name );
	} );
	const resultObject = {
		'query-result': 'true',
		'data-fields':  parsedFields,
		'data-rows':    resultSQL.rows,
		'data-specs':   {
			'query-row-count': resultSQL.rowCount,
			'query-byte-size': new Intl.NumberFormat( 'en-US', {
				style:       'unit',
				unit:        'byte',
				unitDisplay: 'long',
				useGrouping: true,
			} ).format( JSON.stringify( resultSQL.rows ).length ),
		},
	};
	return resultObject;
};
/*--- EXPORTS ---*/
export default commonQuerySQL;