using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Oracle;
using System.Data.SqlClient;

namespace DataAccessLayer
{
    public class SingleConnection
    {
        private SingleConnection() { }
        public bool IsInUse
        {
            get { return isInUse; }
            set { isInUse = value; }
        }
        public bool IsOracleDb
        {
            get { return oracleDatabase; }
            private set { oracleDatabase = value; }
        }
        public string ConnectionString
        {
            get { return connectionString; }
            private set { ConnectionString = value; }
        }
        public Database DataBase
        {
            get
            {
                if (connection.State != System.Data.ConnectionState.Open)
                {
                    Initialize(true);
                }
                return dataBase;
            }
            private set { dataBase = value; }
        }
        public DbConnection Connection
        {
            get
            {
                if (connection.State != System.Data.ConnectionState.Open)
                {
                    Initialize(true);
                }
                return connection;
            }
            set { connection = value; }
        }
        public void Release()
        {
            this.isInUse = false;
        }

        private DbConnection connection;
        private Database dataBase;
        private string connectionString;
        private bool isInUse = false;
        private bool oracleDatabase;
        public SingleConnection(string connectionString, bool oracleDatabase)
        {
            this.connectionString = connectionString;
            this.oracleDatabase = oracleDatabase;
            Initialize();
        }
        private void Initialize(bool inUse = false)
        {
            if (oracleDatabase)
            {
                dataBase = new OracleDatabase(connectionString);
            }
            else
            {
                dataBase = new SqlDatabase(connectionString);
            }
            connection = dataBase.CreateConnection();
            connection.Open();
            isInUse = inUse;
        }
        public void Dispose()
        {
            connection.Close();
            Initialize();
        }
    }
}