//引入 dmdb 包
var db = require('dmdb');
var fs = require('fs');
const dbConfig = require("../config/db.json").db_config;
var pool, conn;
let dataBase = {};

//创建连接池
async function createPool() {
    try {
        var connect = "dm://" + dbConfig.username + ":" + dbConfig.password + "\@" + dbConfig.host + ":" + dbConfig.port + "?autoCommit=false&loginEncrypt=false";
        console.log(connect);

        return db.createPool({
            connectString: connect,
            poolMax: 10,
            poolMin: 1
        });
    } catch (err) {
        throw new Error("createPool error: " + err.message);
    }
}

//获取数据库连接
async function getConnection() {
    try {
        return pool.getConnection();
    } catch (err) {
        throw new Error("getConnection error: " + err.message);
    }
}

//读取数据库返回的 Lob 对象
dataBase.readLob = (lob) => {
    return new Promise(function (resolve, reject) {
        var blobData = Buffer.alloc(0);
        var totalLength = 0;
        lob.on('data', function (chunk) {
            totalLength += chunk.length;
            blobData = Buffer.concat([blobData, chunk], totalLength);
        });
        lob.on('error', function (err) {
            reject(err);
        });
        lob.on('end', function () {
            resolve(blobData);
        });
    });
}

dataBase.initDB = async () => {
    pool = await createPool();
    conn = await getConnection();
}

dataBase.closeDB = async () => {
    try {
        await conn.close();
        await pool.close();
    } catch (err) {
        throw new Error("closeDB error: " + err.message);
    }
}

/**
 * 查询表中字段
 * @param tableName 数据库表名
 * @param params 需要查询的字段
 * @param whereSql 查询条件
 */
dataBase.queryTable = async (tableName, params, whereSql) => {
    try {
        var sql = "";
        if (params != "") {
            for (let index in params) {
                if (sql != "") {
                    sql += ", ";
                }
                sql += params[index];
            }
        }
        else {
            sql = "*";
        }

        var sql = "SELECT " + sql + " FROM " + tableName;

        if (whereSql != "") {
            sql += " WHERE " + whereSql;
        }

        console.log(sql);

        var result = await conn.execute(sql, [], { resultSet: true });
        var resultSet = result.resultSet;
        return resultSet;
    } catch (err) {
        throw new Error("queryTable error: " + err.message);
    }
}

module.exports = dataBase;