using System;
using System.Globalization;
using System.Threading;
using System.IO;

// _updatesoftware.exe
// ทำงานแบบ Windows Application 
namespace Original
{
    static class Program
    {
        public static string MyProg = "_updatesoftware".ToLower();	
        private static string MyApp = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;        
        private static string MyFolderApp = System.IO.Directory.GetCurrentDirectory();  // โพลเดอร์ทำงาน
        public static string cText = "";
        public static int nForWork = 1;
        public static string cTemp = "", cTemp2 = "";  // ตัวแปรดัมมี่
        public static bool insource=false ;
        public static bool inharddisk = false;
        public static string cFleWorkAct = "";  // ไว้ในในอนาคต ต่อไป 
        private static string FLDBdPosVFP = @"D:\BdPosVFP";
        private static string File4list = ""; // แสดงรายการไฟล์ 
        private static string cFle4Error = "_error.txt";
        private static string FleHistory = MyFolderApp + "\\History" + MyProg+".txt";
        private static string FleHistoryR = MyFolderApp + "\\History" + MyProg + "R.txt";
        private static int iAppCount = 0;
        // ตัวแปรเพิ่มเติ่ม
        // private static int var
        static void Information()
        {
            Util.Program.Pok_Mess("Adjust Pc's Environment" + Environment.NewLine+"For Complete");
        }

        static void Readme()
        {
            string Fle4Readme=MyFolderApp+"\\Readme.txt";
            TextWriter Logtxt = new StreamWriter(Fle4Readme);
            // การใช้งาน
            Logtxt.WriteLine("*" + MyProg + ".exe  ,DT : "+ File.GetLastWriteTime(MyApp).ToString("dd/MM/yy HH:mm"));
            Logtxt.WriteLine(MyApp);
            Logtxt.WriteLine(""); 
            Logtxt.WriteLine(""); Logtxt.WriteLine("");	
            string[] readText;

            cTemp = cFle4Error;
            if (File.Exists(cTemp))
            {
                Logtxt.WriteLine("_error.txt ,DT:" + File.GetLastWriteTime(cTemp).ToString("dd/MM/yy HH:mm"));
                Logtxt.WriteLine(cTemp);
                readText = File.ReadAllLines(cTemp);
                foreach (string s in readText) { if (s != "") { Logtxt.WriteLine(s.Trim()); } }
                Logtxt.WriteLine(""); Logtxt.WriteLine("");
            }
            cTemp = FleHistory;
            if (File.Exists(cTemp))
            {
                Logtxt.WriteLine("History_updatesoftware ,DT:" + File.GetLastWriteTime(cTemp).ToString("dd/MM/yy HH:mm"));
                Logtxt.WriteLine(cTemp);
                readText = File.ReadAllLines(cTemp);
                foreach (string s in readText) { if (s != "") { Logtxt.WriteLine(s.Trim()); } }
                Logtxt.WriteLine(""); Logtxt.WriteLine("");
            }
            cTemp = FleHistoryR;
            if (File.Exists(cTemp))
            {
                Logtxt.WriteLine("History_updatesoftwareR.txt ,DT:" + File.GetLastWriteTime(cTemp).ToString("dd/MM/yy HH:mm"));
                Logtxt.WriteLine(cTemp);
                readText = File.ReadAllLines(cTemp);
                foreach (string s in readText) { if (s != "") { Logtxt.WriteLine(s.Trim()); } }
                Logtxt.WriteLine(""); Logtxt.WriteLine("");
            }
            cTemp =  "xxxx.txt";
            if (File.Exists(cTemp)) {
                Logtxt.WriteLine("xxxx.txt ,DT:"+ File.GetLastWriteTime(cTemp).ToString("dd/MM/yy HH:mm"));
                Logtxt.WriteLine(cTemp);
                readText = File.ReadAllLines(cTemp);
                foreach (string s in readText) { if (s != "") { Logtxt.WriteLine(s.Trim()); } }
                Logtxt.WriteLine(""); Logtxt.WriteLine("");
            }
            Logtxt.Close();Logtxt.Dispose();
            if (Layout.Program.Password.Input_Password("Open Readme.txt")) 
            { Util.Program.OpenWebSite(Fle4Readme); Util.Program.OpenWebSite(FleHistoryR); }
        }

        // เก็บประวัติการ Update
        static void Histoty(string cText)
        {
            if (!File.Exists(FleHistory))
            {
                TextWriter Logerrortxt = new StreamWriter(FleHistory);
                Logerrortxt.WriteLine("สร้างเมื่อ "+DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"));
                Logerrortxt.WriteLine("");
                Logerrortxt.Close(); Logerrortxt.Dispose();
            }
            if (cText != "")
            {   using (StreamWriter FleAddText = File.AppendText(FleHistory))
                { FleAddText.WriteLine(cText); FleAddText.Close(); }
            }
        }


        static void UpdateSoftware()
        {
            if (!Directory.Exists("BackupRar")) { Directory.CreateDirectory("BackupRar"); }
            // หาไฟล์ .rar
            bool lSeek = false;
            // int i = 0;
            string FleSpec = "";
            try
            {
                Histoty("*** Start "+DateTime.Now.ToString("dd/MM/yy HH:mm"));
                Histoty("โพลเดอร์ทำงาน " + System.IO.Directory.GetCurrentDirectory());
                DirectoryInfo dFolder = new DirectoryInfo(MyFolderApp);
                FileInfo[] FileList = dFolder.GetFiles("*.rar", SearchOption.TopDirectoryOnly);
                foreach (FileInfo cFileList in FileList)
                {
                    iAppCount++;
                    cTemp = cFileList.Name.Trim();
                    File4list = File4list + "," + cTemp;
                    cTemp = cTemp.Substring(0, cTemp.Length - 4);
                    cTemp2 = "BackupRar\\"+cTemp +"."+ DateTime.Now.ToString("ddMMyyHHmm");
                    if (File.Exists(@"D:\BdPosVFP\Unrar.exe") && !File.Exists("Unrar.exe")) { File.Copy(@"D:\BdPosVFP\Unrar.exe", "Unrar.exe"); }
                    // ตรวจสอบลักษณะไฟล์   
                    switch (cTemp.ToLower())
                    {
                        case ("xxx"): FleSpec = ""; break;
                        case ("dbfrun"): FleSpec = "\\Dbfrun"; break;
                        case ("data"): FleSpec = "\\Data"; break;
                        case ("transac"): FleSpec = "\\Transac"; break;
                        case ("company"): FleSpec = "\\Company"; break;
                        case ("data2cs"): FleSpec = "\\Data2SC"; break;
                        case ("temp"): FleSpec = "\\temp"; break;
                        default: FleSpec = ""; break;
                    }
                    // เริ่มทำการปรับปรุง
                    Util.Program.Pok_Process("Unrar", "x -o+ "+cTemp+" " + FLDBdPosVFP+FleSpec); 
                    Util.Program.Pok_Mess("ปรับปรุงไฟล์ " + cTemp+" สำเร็จ"+Environment.NewLine + Environment.NewLine
                        + "ปรับปรุงที่โพลเดอร์   " +FLDBdPosVFP +Environment.NewLine + Environment.NewLine
                        + "เก็บไฟล์สำรองไว้ที่ " + cTemp2 );
                    if (!insource) { File.Move(cTemp + ".rar", cTemp2); } // กับ Source ไม่ต้องทำอะไร เอาไว้ ทดสอบ 
                    Histoty((char)34+"Unrar x -o+ " + cTemp + " " + FLDBdPosVFP + FleSpec+(char)34+"  -->"+(char)34+cTemp2+(char)34+"  ,"+DateTime.Now.ToString("dd/MM/yy HH:mm"));       
                }
            }
            catch (Exception ex) { Util.Program.Pok_Error(2, cFle4Error, "Copy File Error : " + ex.Message); return; }
            Histoty("*** Finnish " + DateTime.Now.ToString("dd/MM/yy HH:mm"));
            File4list = File4list.Trim(); if (File4list != "") { File4list = File4list.Substring(1); }
            cTemp = "";cTemp2 = "";
        }

        // แจ้งเตือนหลังจากปรับปรุงเสร็จแล้ว
        static void FinnishConfirm()
        {
            cTemp = ""; cTemp2 = "";
            if (!insource) // รันกับ Source ไม่ต้องเข้า 
            {
                string[] readText;
                cTemp = FLDBdPosVFP + "\\Customer.txt";
                if (File.Exists(cTemp)) { readText = File.ReadAllLines(cTemp); cTemp2 = cTemp2 + readText[1].Trim() + "*"; }
                else // ไม่เจอให้หาอีกไฟล์
                {
                    cTemp = FLDBdPosVFP + "\\Environment.txt";
                    if (File.Exists(cTemp))
                    {
                        readText = File.ReadAllLines(cTemp);
                        cTemp2 = cTemp2 + readText[0].Trim().Substring(14) + "*";
                    }
                }
                cTemp2 = cTemp2 + "ปรับโปรแกรม @" + DateTime.Now.ToString("dd/MM/yy HH:mm");
                Directory.SetCurrentDirectory("D:\\BdPosVFP");
                cTemp = "1 9s2uTS8ibhTC4dNpJEmM6FM3Qh7HKUGRcxpYi7CvkZn";
                cTemp = cTemp + " " + cTemp2 + "*" + File4list;
                Util.Program.Pok_Process("Util_Pok2", cTemp);
            }
            Directory.SetCurrentDirectory("D:\\BdPosVFP");
            cTemp = "3 " +(char)34 +FleHistory+(char)34 + " " +(char)34+ FleHistoryR+(char)34;
            Util.Program.Pok_Process("Uyod_S1", cTemp);

            cTemp = ""; cTemp2 = "";
        }


        static void initProg() // เริ่มต้นทำงาน
        {  }


        static void Test_Prog()
        {
            //  UpdateSoftware();
            // Readme();
            // 
            Information();
        }


        static void Main(string[] args)
        {
            if (Util.Program.AppInProcess("hovfp") || Util.Program.AppInProcess("posvfp"))
            { Util.Program.Pok_Mess("ออกจากโปรแกรมทำงานก่อนครับ"+Environment.NewLine+"ไม่สามารถปรับโปรแกรมได้"); return; }
            if (MyFolderApp.Trim().ToLower() == @"d:\bdposvfp") { Util.Program.Pok_Mess("โปรแกรมไม่รองรับโพลเดอร์นี้");  return; }
            initProg(); // เริ่มต้นทำงาน            
            if (!Directory.Exists(FLDBdPosVFP)) { Util.Program.Pok_Mess("ไม่พบโพลเดอร์  "+FLDBdPosVFP);  return; }
            string cpFlag;
            if (MyApp.Substring(0,2)=="V:") { insource = true; } // Run กับ Source
            if (Directory.Exists("R:\\Temp")) {inharddisk=true;}  // Run กับ Harddisk   
            if (args.Length == 0) { if (insource) { cpFlag = "T"; } else { cpFlag = "U"; } }  // Pipop เป็นการทดสอบ
            else { cpFlag = args[0].Trim(); }
            nForWork=1;  //    PipopYou ปรกติ  1 nForWork=0 ไม่ทำอะไรเลย ,1 ทำงานตามปรกติ 2 ไม่Runโปรแกรมและมีเตือน  
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); // เปลี่ยนรูปแบบวันที่ เป็น GB
            switch (cpFlag) // Switch
            {
                case ("0"): 
                case ("?"): Readme(); break;
                case ("T"): Test_Prog(); break;
                case ("U"):
                    UpdateSoftware();
                    // หาอีกครั้งในโพลเดอร์ระดับเดียวกัน 
                    Directory.SetCurrentDirectory(MyFolderApp);
                    string SubFLDrar2= @"..\Backup";
                    if (Directory.Exists(SubFLDrar2))
                    {
                        Directory.SetCurrentDirectory(SubFLDrar2);
                        MyFolderApp = System.IO.Directory.GetCurrentDirectory();
                        UpdateSoftware();
                    }
                    if (iAppCount == 0) { Layout.Program.LayOut.ShowMessage(2, "", "", "ไม่พบไฟล์ปรับปรุง", "", ""); }
                    else { Layout.Program.LayOut.ShowMessage(2, "", "ไฟล์ปรับปรุง", "เสร็จแล้ว", "", ""); FinnishConfirm(); }
                    break;
                default:  break;  
            } 
        }
    }
}
