using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.IO.Compression;

    
namespace Original
{
    static class Program
    {

        static void UtilPOK3ReadMe()
        {
            MessageBox.Show("utilpok3 1 ชื่อโพลเดอร์ ชื่อไฟล์   ---> Save หน้าจอเป็นรูปภาพ" + System.Environment.NewLine
            + "utilpok3 2 ชื่อโพลเดอร์  ชื่อไฟล์   ---> Save หน้าจอเป็นรูปภาพและเปลี่ยนชื่อตามเวลา" + System.Environment.NewLine
            + "utilpok3 3 ชื่อโพลเดอร์ ชื่อไฟล์   ---> Save ประวัติ หน้าจอเป็นรูปภาพ" + System.Environment.NewLine
            + "utilpok3 4 ชื่อโพลเดอร์  ชื่อไฟล์   ---> Save หน้าจอเป็นรูปภาพและเปลี่ยนชื่อตามครั้ง" + System.Environment.NewLine
            + "utilpok3 5 ชื่อโพลเดอร์ ชื่อไฟล์   ---> Save หน้าจอเป็นรูปภาพ ห่าง 2 นาที" + System.Environment.NewLine
            + "utilpok3 6 เวบปลายทาง ---> เปิดเวบ" + System.Environment.NewLine
            + "" + System.Environment.NewLine
            + "" + System.Environment.NewLine
            + "" + System.Environment.NewLine
            , "", MessageBoxButtons.OK, MessageBoxIcon.Error);

        }


        static void Scr2Jpeg() // Save หน้าจอเป็นรูปภาพ สร้างไฟล์ Temp\tempJpg.jpg
        {
            if (!Directory.Exists(@"Temp")) { Directory.CreateDirectory(@"Temp"); Pok_Mess("สร้างโพลเดอร์ " + @"Temp"); }
            string cFLSaveName;
            cFLSaveName = @"Temp\tempJpg.jpg";
            Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            Graphics graphics = Graphics.FromImage(printscreen as Image);
            graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size);
            printscreen.Save(@cFLSaveName, ImageFormat.Jpeg);
        }

        static bool InWordFolder(string s1)
        {
            string s2 = "HISTORY";
            bool b = s1.ToUpper().Contains(s2);
            if (!b) { s2 = "ERROR"; b = s1.ToUpper().Contains(s2);  }
            if (!b) { s2 = "DATE"; b = s1.ToUpper().Contains(s2);  }
            if (!b) { s2 = "ROOM"; b = s1.ToUpper().Contains(s2);  }
            if (!b) { s2 = "FOOD"; b = s1.ToUpper().Contains(s2); }
            if (!b) { s2 = "POS"; b = s1.ToUpper().Contains(s2); }
            return b;
        }


        static void Write2Jpeg(string cFolder,string cFLname,int nFLSaveName) // เขียน ข้อความ ในรูป สร้างไฟล์ Temp\tempJpg2.jpg
        {
            string cFLSaveName, cfAddText, cfFileSave, cfTempSave;

            if (!Directory.Exists(@cFolder)) { Directory.CreateDirectory(@cFolder);}
            if (!Directory.Exists(@"Temp")) { Directory.CreateDirectory("Temp"); }
            if (cFolder.Substring(cFolder.Length - 1, 1) != @"\") { cFolder = cFolder + @"\"; } // เช็คโพลเดอร์ 
            if (!InWordFolder(cFolder))
            {
                if (!Directory.Exists(@cFolder + "History")) { Directory.CreateDirectory(@cFolder + "History"); }
                if (!Directory.Exists(@cFolder + "Error")) { Directory.CreateDirectory(@cFolder + "Error"); }
            }
            
            cFLSaveName =cFolder+cFLname;

            switch (nFLSaveName.ToString())
            {
                case "2":  // เปลี่ยนชื่อตามเวลา
                    { cfAddText = " Date " + DateTime.Now.ToString("dd-MM-yyyy") + " Time " + DateTime.Now.ToString("HHmmss"); break; }
                case ("4"): // เปลี่ยนชื่อ ตามคาบเวลา
                    { cfAddText = "XX";
                        int iRun;
                        char pad = '0';
                        string cNameForCheck="";
                        for (iRun = 1; iRun <= 99; iRun++)
                        {
                            cfAddText = "-"+iRun.ToString().PadLeft(2, pad);
                            cNameForCheck = cFLSaveName  +cfAddText+ ".jpg";
                            if (!File.Exists(cNameForCheck)) { break; }
                        }
                        // Pok_Mess(cNameForCheck);
                        break;
                    }
                default: // ชื่อตามปรกติ 

                    { cfAddText = ""; break; }
            }


            var bmp = Bitmap.FromFile(@"Temp\tempJpg.jpg");
            var newImage = new Bitmap(bmp.Width, bmp.Height);

            var gr = Graphics.FromImage(newImage);
            Font drawFont = new Font("Tomaha",20);
            gr.DrawImageUnscaled(bmp, 0, 0);
            gr.DrawString("@วันที่ "+DateTime.Now.ToString("dd/MM/yyyy"), drawFont, Brushes.DarkRed,new RectangleF(10,10,0,50));
            gr.DrawString("@เวลา " + DateTime.Now.ToString("HH:mm:ss")+" น.", drawFont, Brushes.DarkRed, new RectangleF(10, 50, 0, 50));

            cfFileSave = cFLSaveName.Trim() + cfAddText + ".jpg";
            cfTempSave = @"Temp\tempJpg2.jpg";
            newImage.Save(@cfFileSave);
            newImage.Dispose();
            File.Copy(@cfFileSave, cfTempSave,true);
        }


        static void Scr2History(string chFolder, string chFLname)
        {

            Scr2Jpeg();
            Write2Jpeg(chFolder, chFLname,1);

            string cfFile2Save;
            cfFile2Save = chFolder + "History\\" + DateTime.Now.ToString("HHmm") + ".jpg";

            if (!File.Exists(@"Temp\tempChk.jpg")) {
                File.Copy(@"Temp\tempJpg2.jpg", @"Temp\tempChk.jpg", true);
                File.Copy(@"Temp\tempJpg2.jpg", @cfFile2Save, true);
                return;
            }
            var datenow = DateTime.Now;
            var datefile = File.GetLastWriteTime(@"Temp\tempChk.jpg");

            if ((datenow - datefile).TotalMinutes >= 10)
            {
                File.Copy(@"Temp\tempJpg2.jpg", @cfFile2Save, true);
                File.Copy(@cfFile2Save, @"Temp\tempChk.jpg", true);
            }
        }



        static void Copy2LongName(String SourceFile, String TargetFile)
        {
            if (!File.Exists(@SourceFile)) { Pok_Mess("ไม่พบไฟล์ " + SourceFile);return; }
            File.Copy(@SourceFile, @TargetFile,true);
        }


        static void OpenWebSite(String URLname)
        {
            var opentwebthis = new ProcessStartInfo("chrome.exe");  // iexplore.exe
            opentwebthis.Arguments = URLname;
            Process.Start(opentwebthis);
        }

        static void Pok_Mess(string cfWord)
        {
            MessageBox.Show(cfWord+ System.Environment.NewLine
            + "" + System.Environment.NewLine
            + "" + System.Environment.NewLine
            , "", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }


        static bool JpgTimeOut(string cFolder, string cFLname, int nMinute)
        {
            string cFLSaveName;
            bool nJpgTimeOut;
            nJpgTimeOut = true;
            if (cFolder.Substring(cFolder.Length - 1, 1) != @"\") { cFolder = cFolder + @"\"; } // เช็คโพลเดอร์ 
            cFLSaveName = cFolder + cFLname ;
            if (File.Exists(@cFLSaveName))
            {
                var datenow = DateTime.Now;
                var datefile = File.GetLastWriteTime(@cFLSaveName);
                // Pok_Mess((datenow - datefile).TotalMinutes.ToString());
                if ((datenow - datefile).TotalMinutes >= nMinute)
                { nJpgTimeOut = true;  }   else { nJpgTimeOut = false; }

            }
            else { nJpgTimeOut = true; }
            return nJpgTimeOut;
        }


             static void TestUtilPok3()
        {

        }



        static void Main(string[] args)
        {
            string cpFlag = "", cpText1 = "", cpText2 = "";
            if (args.Length == 0)
            { UtilPOK3ReadMe(); return; }
            else
            {cpFlag = args[0]; cpText1 = "";
                for (int i = 1; i < args.Length; i++)  //  เริ่มตั้งแต่ หลักที่ 2
                { cpText1 = cpText1 + " " + args[i]; }
                for (int i = 2; i < args.Length; i++)  //  เริ่มตั้งแต่ หลักที่ 3
                { cpText2 = cpText2 + " " + args[i]; }
            }

            cpFlag = cpFlag.ToUpper().Trim();
            cpText1 = cpText1.Trim();
            cpText2 = cpText2.Trim();
            // Pok_Mess("cpFlag="+cpFlag+" ,cpText1="+cpText1+" ,cpText2="+cpText2);
            // ส่วนฟังก์ชันการทำงาน

            switch (cpFlag)
            {
                case ("X"):
                    return;
                case ("0"): TestUtilPok3() ; break; // ทดสอบ
                case ("1"): //  Save หน้าจอเป็นรูปภาพ
                    Scr2Jpeg(); Write2Jpeg(args[1].Trim(),cpText2, 1); break;
                case ("2"): //  Save หน้าจอเป็นรูปภาพและชื่อไฟล์เปลี่ยนตามเวลา
                    Scr2Jpeg(); Write2Jpeg(args[1].Trim(), cpText2, 2); break;
                case ("3"): Scr2History(args[1].Trim(), cpText2); break; // เก็บประวัติในโพลเดอร์ History 
                case ("4"): //  Save หน้าจอเป็นรูปภาพและชื่อไฟล์เปลี่ยนตามเวลา
                    Scr2Jpeg(); Write2Jpeg(args[1].Trim(), cpText2, 4); break;
                case ("5"): // ตรวจสอบเวลาก่อนจะsaveทับ
                    { if (JpgTimeOut(args[1].Trim(), cpText2 + ".jpg", 2))
                        { Scr2Jpeg(); Write2Jpeg(args[1].Trim(), cpText2, 1); }
                        break; }
                case ("6"): OpenWebSite(cpText1) ; break;//  เปิดเวบ
            }

        }
    }


}
