// 连接MySQL
var mysql = require('mysql');
var config = require('./index')
var pool = mysql.createPool(config.database);
var Async = require('async');

console.log("数据库环境",config.database);

module.exports = {
	// 处理一个数据库事务
	transactionHandler: (callback) => {
		pool.getConnection(function(err, connection) {
			if (err) {
				console.log("getConnection error", err);
				return callback(err, null);
			}

			connection.beginTransaction(function(err) {
				if (err) {
					console.log("beginTransaction error", err);
					return callback(err, null);
				}

				console.log("开始执行transaction");
				callback(null, connection);
			})
		});
	},

	// 处理事务的结果
	transactionResultHandler: (err, connection, callback) => {
		if (err) {
			connection.rollback(() => {
				console.log("某事务出错,回滚成功, Error: ", err);
				connection.release();
			});
			return;
		}

		connection.commit(err => {
			if (err) {
				connection.rollback(() => {
					console.log("commit出错,回滚成功, Error: ", err);
					connection.release();
				});
				return;
			}
			connection.release();
			callback();
		});
	},

	// 旧版数据库连接
	query: (sql, callback) => {
		pool.getConnection(function(err,connection){
			if(err){
				console.log("db err", err)
				console.log("--------db 连接失败 ----------");
				logger.error("DB CONNECTION ERROR",err);
				
				console.log("--------db 连接失败 error log end ----------");
			}
			connection.beginTransaction(function(err) {
				if(err){
					console.log("db connection error",err);
					callback(err,null);
				}else{
					connection.query(sql,function(qerr,rows){
						//释放连接
						connection.release();
						//事件驱动回调
						if (qerr) {
							connection.rollback(function() {
								console.log("sql回滚成功1",qerr)
								callback(qerr,null);
								throw qerr;
							});
						}
						connection.commit(function(err) {
							if (err) {
								connection.rollback(function() {
									console.log("sql回滚成功")
									throw err;
								});
							}
							callback(qerr,rows);
						});
					});
				}
			})
			
		});
	},
}