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();
        public static bool App4Console = false ; // true ทำงานแบบ Console Application ,fause ทำงานแบบ Windows Application 
        private static string MyApp = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
        public 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
            Layout.Program.LayOut.BackGroud(1);
            bool lSeek = false;
            string cTextMess;
            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 ("customer"): FleSpec = "\\Customer"; break; 
                        case ("data2sc"): FleSpec = "\\Data2SC"; break;
                        case ("temp"): FleSpec = "\\temp"; break;
                        default: FleSpec = ""; break;
                    }
                    // เริ่มทำการปรับปรุง
                    cTextMess = "ปรับปรุงไฟล์  " + cFileList.Name + " -> " + FLDBdPosVFP + Environment.NewLine + Environment.NewLine;
                    cTextMess = cTextMess+"ชุดคำสั่ง " + Environment.NewLine + "Unrar x -o+ " + Environment.NewLine + cFileList.FullName ;
                    cTextMess = cTextMess + Environment.NewLine + FLDBdPosVFP + FleSpec;
                    if (Util.Program.Pok_YesNO2(cTextMess))
                    {
                        Util.Program.Pok_Process("Unrar", "x -o+ " + cTemp + " " + FLDBdPosVFP + FleSpec);
                        MyTime.Program.Pok_TimeWait(1, 5); // 5 วินาที  
                        Util.Program.Pok_Mess("ปรับปรุงไฟล์ " + cTemp + " สำเร็จ" + Environment.NewLine + Environment.NewLine
                            + "ปรับปรุงที่โพลเดอร์   " + FLDBdPosVFP + Environment.NewLine + Environment.NewLine
                            + "เก็บไฟล์สำรองไว้ที่ " + cTemp2);
                        if (!insource) // กับ Source ไม่ต้องทำอะไร เอาไว้ ทดสอบ   
                        {
                            File.Move(cTemp + ".rar", cTemp2);
                            MyTime.Program.Pok_TimeWait(1, 2); // 2 วินาที
                            cTextMess = "ย้ายไฟล์ " + cFileList.FullName + Environment.NewLine + Environment.NewLine;
                            cTextMess = cTextMess + "ไป " + cTemp2 + " ไม่สำเร็จ";
                            if (!File.Exists(cTemp2)) { Util.Program.Pok_Mess(cTextMess); }
                        }
                        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 ไม่ต้องเข้า  
            {
                cTemp2 = Util.Program.Customername()+"*";
                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);  // กลับไฟล์Text จากล่างไปบน
            cTemp = ""; cTemp2 = ""; 
        }


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

        static void Test_Prog()  
        {
            // Util.Program.Pok_Mess(Util.Program.Customername());
            // Layout.Program.LayOut.BackGroud(1);
            // Information();
            // Layout.Program.LayOut.BackGroud(2);
            // Information();
            //Layout.Program.LayOut.Show_and_Exit(0, "1", "2", "3", "4", "5");
            UpdateSoftware();
            if (iAppCount == 0) { Layout.Program.LayOut.ScreenShow(2, "", "", "ไม่พบไฟล์ปรับปรุง", "", ""); }
            else { Layout.Program.LayOut.ScreenShow(2, "", "ไฟล์ปรับปรุง", "เสร็จแล้ว", "", ""); FinnishConfirm(); }
            //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();
                    if (iAppCount == 0) { Layout.Program.LayOut.ScreenShow(2, "", "", "ไม่พบไฟล์ปรับปรุง", "", ""); }
                    else { Layout.Program.LayOut.ScreenShow(2, "", "ไฟล์ปรับปรุง", "เสร็จแล้ว", "", ""); FinnishConfirm(); }
                    break;
                default:  break;  
            } 
        }
    }
}
