using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data;
using System.Security.Cryptography;  
namespace DeiNiu.Utils
{
    ///   
    /// SQL数据库服务器配置静态类  
    ///   
    public class ConntionConfig
    {
       public static string connString = "SqlconnectionString";
        ///   
        /// 检查配置信息  
        ///   
        /// 完整有效返回true,无效则启动配置界面  
        public static bool CheckConntionConfig(string conn=null)
        {
            if (CheckedConnection(conn))
            {
                return true;
            }
            else
            {
                return false;// CheckedConfig();
            }
        }
        /*
        ///   
        /// 验证配置信息  
        ///   
        private static bool CheckedConfig()
        {
            MessageBox.Show("数据库服务器无法连接,请重新配置。",
                   "系统提示",
                   MessageBoxButtons.OK,
                   MessageBoxIcon.Warning);
            SvrConf svrConf = new SvrConf();
            svrConf.ShowDialog();
            if (MessageBox.Show("是否现在进入系统?", "询问",
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Question) == DialogResult.Yes)
            {
                return CheckConntionConfig();
            }
            else
            {
                return false;
            }
        }
        */
        ///   
        /// 验证配置信息的数据库连接  
        ///   
        private static bool CheckedConnection(string conn=null)
        {
            string connectionString = string.IsNullOrEmpty(conn) ? ConString() : conn;
            return !string.IsNullOrEmpty(connectionString) &&
                   TestConntion(connectionString);
        }
        ///   
        /// 测试与服务器数据库是否成功连接  
        ///   
        /// 数据库连接字符串  
        ///   
        public static bool TestConntion(string connectionString)
        {
       
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                try
                {
                    if (conn.State == ConnectionState.Open)
                        conn.Close();
                    conn.Open();
                    WmsConstants.SQL_CONN_WMS = connectionString;//set con in memory
                    return true;
                }
                catch
                {
                    return false;
                }
                finally
                {
                    conn.Close();
                    conn.Dispose();
                }
            }
        }
        ///   
        /// 数据库连接字符串,自动判断加密状态并获取对应连接字符串。  
        ///   
        ///   
        public static string ConString()
        {
            
            if (IsEncrypt())
            {
                string cstr = ConfigurationManager.AppSettings[connString];
                try
                {
                    //解密后的数据库连接字符串  
                    cstr = DESEncrypt.Decrypt(cstr);
                    return cstr;
                }
                catch
                {
                    //如果勾选加密,第一次登陆时取到的是未加密连接字符串,所以直接返回。如果返回空字符串会导致首次登陆失败。  
                    //ConfigurationManager.AppSettings["ConnectionString"] = string.Empty;  
                    //return string.Empty;  
                    return cstr;
                }
            }
            else
            {
                //无须解密的数据库连接字符串  
                return ConfigurationManager.AppSettings[connString];
            }
        }
        ///   
        /// 验证是否已加密  
        ///   
        ///   
        internal static bool IsEncrypt()
        { 
            switch (ConfigurationManager.AppSettings["ConStringEncrypt"])
            {
                case "1":
                case "TRUE":
                case "true":
                    return true;
                default:
                    return false;
            }
        }
    }  
}