/**
 * Created with JetBrains WebStorm.
 * User: Gary
 * Date: 12-11-30
 * Time: 上午10:38
 * To change this template use File | Settings | File Templates.
 */
var Mysql = require('mysql');  
// var config = MysqlConfig;
var pool = function(config){  
    this.free = [];//空闲连接集合
    this.used = 0; //已使用连接集合
    for(var key in config.pool)
        this[key] = config.pool[key];
    this.newConnection = function(){
        var con = Mysql.createConnection(config.db);
        this.free.push(con);
        return con;
    };
    this.getConnection = function(){
        var con = null;
        if(this.used < this.maxconn){
            if(this.free.length > 0){
                con = this.free[0];
                this.free.splice(0,1);
                if(!con)
                    con = this.getConnection();
            }else{
                con = this.newConnection();
            }
            this.used++;
            // console.log('当前使用连接: ' + this.used + ' 空闲连接: ' + this.free.length);
        }
        return con;
    };
    this.freeConnection = function(con){
        this.free.push(con);
        this.used--;
    };
    this.freeAll = function(){
        this.used = 0;
        for(var i = 0; i < this.free.length; i++){
            this.free[i].end();
        }
        this.free = [];
    };
};
var client = {  
    pools: [],
    /**
     * 得到一个数据库连接
     * @param name 数据库pool名字name
     * @return {*}
     */
    getConnection: function(name){
        var pool = this.pools[name];
        return pool ? pool.getConnection() : null;
    },
    /**
     * 释放一个数据库连接
     * @param name 数据库pool名字name
     * @param con 连接
     */
    freeConnection: function(name,con){
        var pool = this.pools[name];
        if(pool)
            pool.freeConnection(con);
    },
    /**
     * 释放一个数据库所有连接
     * @param name 数据库pool名字name
     */
    freePool: function(name){
        var pool = this.pools[name];
        if(pool)
            pool.freeAll();
    },
    /**
     * 释放所有数据库的所有连接
     */
    freeAll: function(){
        for(var key in this.pools)
            this.pools[key].freeAll();
    }
};
exports.instance = function(config){
    if(client.pools.length < 1){
        // for(var i = 0; i < config.length; i++){
            client.pools[config.pool.name] = new pool(config);
        // }
    }
    return client;
};