using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Threading;
using System.Globalization;

using SystemCommon;


namespace 顧客分析君
{
    static class Program
    {
        //public static C01固定値 固定値;
        public static C02業務共通処理 業務共通処理;
        public static C04システム共通処理 システム共通処理;


        /// <summary>
        /// アプリケーションのメイン エントリ ポイントです。
        /// </summary>
        [STAThread]
        static void Main()
        {
            try
            {
                //固定値 = new C01固定値();
                業務共通処理 = new C02業務共通処理();
                システム共通処理 = new C04システム共通処理();

                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);

                if (C04システム共通.Chk多重起動() == false)
                    return;

#if RELEASE
                Properties.Settings.Default.KB = Properties.Settings.Default.R_KB;
                Properties.Settings.Default.MASTER = Properties.Settings.Default.R_MASTER;
                Properties.Settings.Default.SQLSERVER_SERVICE_NAME = Properties.Settings.Default.R_SQLSERVER_SERVICE_NAME;
                //Properties.Settings.Default.Save();
#endif

				if (C04システム共通.IsExistシステムファイル() == false)
                {
                    MessageBox.Show(Properties.Resources.MSG_ERR_003, Properties.Resources.MSG_TTL_起動エラー
                        , MessageBoxButtons.OK, MessageBoxIcon.Warning);

                    return;
                }

				string strDataPath;
				if (C05DBCommon.SetDataPath(out strDataPath) == false)
                {
                    MessageBox.Show(Properties.Resources.MSG_ERR_002, Properties.Resources.MSG_TTL_起動エラー
                        , MessageBoxButtons.OK, MessageBoxIcon.Warning);

                    return;
                }

				Properties.Settings.Default.DataPath = strDataPath;

                string strTmp = "";
				if (C05DBCommon.ChkSQLServer(Properties.Settings.Default.SQLSERVER_MACHIN_NAME
					, Properties.Settings.Default.SQLSERVER_SERVICE_NAME
					, Properties.Settings.Default.MASTER
					, ref strTmp) == false)
                {
					C05DBCommon.SQLServer起動(Properties.Settings.Default.SQLSERVER_MACHIN_NAME
						, Properties.Settings.Default.SQLSERVER_SERVICE_NAME);

					if (C05DBCommon.ChkSQLServer(Properties.Settings.Default.SQLSERVER_MACHIN_NAME
						, Properties.Settings.Default.SQLSERVER_SERVICE_NAME
						, Properties.Settings.Default.MASTER
						, ref strTmp) == false)
                    {

                        MessageBox.Show(Properties.Resources.MSG_ERR_001, Properties.Resources.MSG_TTL_起動エラー
                            , MessageBoxButtons.OK, MessageBoxIcon.Error);

                        return;
                    }
                }

				if (C05DBCommon.IsExistDB(Properties.Settings.Default.MASTER, "KB2010") == false)
                {
					C05DBCommon.ゴミDBファイルが残っていたら削除(Properties.Settings.Default.SQLSERVER_MACHIN_NAME
						, Properties.Settings.Default.SQLSERVER_SERVICE_NAME, strDataPath);

					if (Program.システム共通処理.DB初期化() == false)
                    {
                        MessageBox.Show(Properties.Resources.MSG_W_DBの初期化に失敗した為_起動する事ができません
							, Properties.Resources.MSG_TTL_起動エラー, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                }
				else if (C05DBCommon.IsExistSP(Properties.Settings.Default.KB, "SP_CREATE_TABLE") == false)
                {
                    if (Program.システム共通処理.DB初期化() == false)
                    {
                        MessageBox.Show(Properties.Resources.MSG_W_DBの初期化に失敗した為_起動する事ができません
							, Properties.Resources.MSG_TTL_起動エラー, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                }

                D01業務共通TableAdapters.D01属性ta d01属性ta = new D01業務共通TableAdapters.D01属性ta();
                if (d01属性ta.Scalar値(92) == "")
                {
                    _106言語選択 _106言語選択 = null;
                    _106言語選択 = new _106言語選択();
                    _106言語選択.mb初期表示 = true;
                    if (_106言語選択.ShowDialog() == DialogResult.Cancel)
                        return;
                }
                else
                {
                    //Program.システム共通処理.Set言語(d01属性ta.Scalar値(92));
                    Thread.CurrentThread.CurrentUICulture = new CultureInfo(d01属性ta.Scalar値(92), true);
                }

                Application.Run(new _102メインメニュー());

            }
            catch (Exception ex)
            {
                C04システム共通.ErrorLog("Program", "Main", ex);
            }
        }
    }
}
