using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text;
using System.IO;
using System.Management;
using System.Net;
using System.Media;

namespace utilpok
{
    static class Program
    {

        static void UtilPOKReadMe()
        {
            MessageBox.Show("utilpok 1 ชื่อเท็กไฟล์   ---> แสดงข้อมูลใน textfile " + System.Environment.NewLine
        + "utilpok 2  ชื่อโพลเดอร์  ---> สร้างโพลเดอร์ แบบไม่เตือน " + System.Environment.NewLine
        + "utilpok 3  ชื่อโพลเดอร์  ---> สร้างโพลเดอร์ แบบเตือน " + System.Environment.NewLine
        + "utilpok 4  0  ---> แสดงเครื่องพิมพ์ ใน Text ไฟล์" + System.Environment.NewLine
        + "utilpok 5  --->" + System.Environment.NewLine
        + "utilpok 6  ข้อความ  ---> แสดงข้อความ" + System.Environment.NewLine
        + "utilpok 7  ชื่อไฟล์เสียง .wav  ---> เปิดเสียงดังต่อเนื่อง" + System.Environment.NewLine
        + "utilpok 8  ข้อความ  ---> เปิดเพลง _sound.wav แบบต่อเนื่อง มีเตือน" + System.Environment.NewLine
        + "utilpok 9  ข้อความ  ---> เปิดเพลง _sound.wav แบบไม่ต่อเนื่อง ไม่มีเตือน" + System.Environment.NewLine
        + "utilpok A  ชื่อโพลเดอร์  ---> เปิดไฟล์เสียงทีละไฟล์" + System.Environment.NewLine
        + "utilpok B  ชื่อไฟล์  ---> เปลี่ยนชื่อไฟล์ pdf.pdf เป็นชื่ออื่นๆ (pdf2ok.txt)" + System.Environment.NewLine
        + "utilpok C  0  ---> แสดงเครื่องพิมพ์ ใน Text ไฟล์" + System.Environment.NewLine
        + "utilpok D  0  ---> ลบไฟล์ pdf.pdf ใน Folder ต่างๆ" + System.Environment.NewLine
        + "utilpok E  ชื่อไฟล์ใหม่  ---> เปลี่ยนชื่อ rename.txt,rename.pdf,rename.xls" + System.Environment.NewLine
        + "utilpok F  ชื่อโพลเดอร์  ---> ลบไฟล์ *.txt,*.pdf,*.jpg ที่เกินจำนวนวันที่ระบุ" + System.Environment.NewLine
        + "utilpok G  ชื่อไฟล์  ---> เปลี่ยนชื่อไฟล์ pdf.pdf เรียงเปลี่ยนตามครั้ง (pdf2ok.txt)" + System.Environment.NewLine
        + "" + System.Environment.NewLine
        + "" + System.Environment.NewLine
        + "" + System.Environment.NewLine
        , "", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }


        //  แสดงข้อมูล ใน TEXT 
        static void ShowFLtxt(string cfFileTxt)
        {
            if (!File.Exists(cfFileTxt)) { MessageBox.Show("ไม่เจอไฟล์ "+cfFileTxt+" กรุณาตรวจสอบ");return; }
            StreamReader readtext = new StreamReader(cfFileTxt);
            string contents = readtext.ReadToEnd();
            readtext.Close();
            readtext.Dispose();
            MessageBox.Show(contents,"ไฟล์ "+ cfFileTxt);
        }


        // สร้าง โพลเดอร์ แบบเตือน 
        static void Make4Folder(string cfFolder,int nfWarn)
        {
            bool exists = System.IO.Directory.Exists(cfFolder);
            if (!exists)
            {
                System.IO.Directory.CreateDirectory(cfFolder);
                if (nfWarn == 1) { MessageBox.Show("สร้างโพลเดอร์ " + cfFolder + " สำเร็จ", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
            }
            else
            {
                if (nfWarn == 1) { MessageBox.Show(cfFolder + " มีอยู่แล้ว", "", MessageBoxButtons.OK, MessageBoxIcon.Error); }
            }
        }




        // แสดงเครื่องพิมพ์ ใน Text ไฟล์ 
        static void ListPrinter2Txt(int nfWarnShow)
        {
            int nPDFHave = nfWarnShow,nPREVIEWHave= nfWarnShow, nDPREVIEWHave = nfWarnShow;
            nPDFHave = 0;
            nPREVIEWHave = 0;
            nDPREVIEWHave = 0;

            TextWriter Print2Txt = new StreamWriter("Print.txt");
            foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
            {
                Print2Txt.WriteLine(printer);
                if (printer == "PDF") { nPDFHave = 1;  }
                if (printer == "TMP") { nPDFHave = 1;  }
                if (printer == "PREVIEW") { nPREVIEWHave = 1; }
                if (printer == "DPREVIEW") { nDPREVIEWHave = 1; }
            }
            Print2Txt.Close();
            if (nPDFHave == 1) { File.Copy("Data\\Filehave.dir", "pdf.hav", true); }
            else { if (File.Exists("pdf.hav")) { File.Delete("pdf.hav"); } }

            if (nPREVIEWHave == 1) { File.Copy("Data\\Filehave.dir", "preview.hav", true); }
            else { if (File.Exists("preview.hav")) { File.Delete("preview.hav"); } }

            if (nDPREVIEWHave == 1) { File.Copy("Data\\Filehave.dir", "dpreview.hav", true); }
            else { if (File.Exists("dpreview.hav")) { File.Delete("dpreview.hav"); } }

            if (nfWarnShow == 1) { ShowFLtxt("Print.txt"); }
        }


        
        //
        static void ShowTxtOnSCR(string txtshowonscr)
        {
            MessageBox.Show(txtshowonscr,"ข้อความเตือน",MessageBoxButtons.OK,MessageBoxIcon.Information);
        }



        static void SoundOpen(string file4song)
        {
            if (!File.Exists(file4song)) { MessageBox.Show("ไม่พบไฟล์ " + file4song); return; }
            SoundPlayer SoundContinue = new SoundPlayer(file4song);
            SoundContinue.PlayLooping();
            MessageBox.Show("ชื่อเพลง "+file4song, "ปิดเสียง");
            SoundContinue.Stop();
        }



        static void _SoundOpen(int nfOption, string Txt2Show)
        {

            if (File.Exists("Temp\\_sound.tmp")) { return; } // ปิดโปรแกรมเสียงไม่ถูกต้อง 
            if (!File.Exists("_sound.wav")) {Pok_Mess("ไม่พบไฟล์ _sound.wav"); return; }
            if (!Directory.Exists("Data")) { Directory.CreateDirectory("Data"); Pok_Mess("สร้างโพลเดอร์ DATA"); }
            if (!File.Exists("Data\\FileHave.dir")) {File.Copy("_sound.wav", "Data\\FileHave.dir"); Pok_Mess("สร้างไฟล์ Data\\FileHave.dir"); }

            File.Copy(@"Data\FileHave.dir", @"Temp\_sound.tmp");
            SoundPlayer SoundContinue = new SoundPlayer(@"_sound.wav");
            if (nfOption == 1) { 
            SoundContinue.PlayLooping();
            MessageBox.Show("ปิดเสียงเตือน", "ปิดเสียง", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            SoundContinue.Stop(); }
            if (nfOption == 2)
            {
                SoundContinue.PlaySync();
            }
            File.Delete(@"Temp\_sound.tmp"); 
        }


        static void _SoundAll(string cFolderShow)
        {
            DirectoryInfo cFileList = new DirectoryInfo(cFolderShow);
            FileInfo[] Files = cFileList.GetFiles("*.wav"); 
            foreach (FileInfo file in Files)
            {
                 SoundOpen(cFolderShow + @"\" + file.Name);
            }


        }

        
        static void ChgTmpFLE2OTher(string cOtherFileName)
        {
            if (cOtherFileName == "") { MessageBox.Show("ชื่อไฟล์เป็นช่องว่าง");return;}
            if (File.Exists("rename.pdf")) { File.Delete(@cOtherFileName + ".pdf");}
            if (File.Exists("rename.pdf")) { File.Move("rename.pdf",@cOtherFileName + ".pdf");File.Delete("rename.pdf"); }
            if (File.Exists("rename.txt")) { File.Delete(@cOtherFileName + ".txt"); }
            if (File.Exists("rename.txt")) { File.Move("rename.txt", @cOtherFileName + ".txt"); File.Delete("rename.txt"); }
            if (File.Exists("rename.xls")) { File.Delete(@cOtherFileName + ".xls"); }
            if (File.Exists("rename.xls")) { File.Move("rename.xls", @cOtherFileName + ".xls"); File.Delete("rename.xls"); }
        }




        static void ChgTmpPDF2OTher(int ncOtherFileName, string cOtherFileName)
        {
            if (!File.Exists("pdf4ok.txt"))
            {
                TextWriter PDFOK = new StreamWriter("pdf4ok.txt");
                PDFOK.WriteLine("PDF Build -->OK");
                PDFOK.Close();
            }

            DriveInfo dDrive = new DriveInfo("D");
            if (!dDrive.IsReady) { return; }
            if (!Directory.Exists("D:\\Temp")) { Directory.CreateDirectory("D:\\Temp"); }
            if (!File.Exists("D:\\Temp\\FileHave.dir")) { File.Copy("pdf4ok.txt", "D:\\Temp\\FileHave.dir"); }

            switch (ncOtherFileName.ToString())
            {
                case ("0"): // ไม่ต้องเปลี่ยนชื่อ ให้ลบและเขียนทับ
                    {
                        break;
                    }
                case ("1"): // ต้องเปลี่ยนชื่อตามครั้ง
                    {
                        int iRun;
                        char pad = '0';
                        string cfAddText = "",cNameForCheck = cOtherFileName;
                        for (iRun = 1; iRun <= 99; iRun++)
                        {
                            // cfAddText = "-" + iRun.ToString().PadLeft(2, pad);
                            cfAddText = "@" + iRun.ToString().PadLeft(2, pad);
                            cNameForCheck = cOtherFileName + cfAddText ;
                            if (!File.Exists(cNameForCheck + ".pdf")) { cOtherFileName = cNameForCheck; break; }
                        }
                        break;
                    }
            }
            if (File.Exists("D:\\Temp\\pdf.pdf")) { File.Copy("D:\\Temp\\pdf.pdf", @cOtherFileName + ".pdf",true); }

            // ประสบความสำเร็จ ในการสร้างไฟล์ D:\\Temp\\pdf.pdf Pipop
            if (File.Exists("D:\\Temp\\pdf.pdf") && !File.Exists("pdf2ok.txt")) { File.Copy("pdf4ok.txt", "pdf2ok.txt"); }
            if (!File.Exists("D:\\Temp\\pdf.pdf") && File.Exists("pdf2ok.txt")) { File.Delete("pdf2ok.txt"); }

            // ตรวจสอบอีกครั้ง เพื่อลบไฟล์ pdf.pdf
            if (File.Exists("D:\\Temp\\pdf.pdf")) { File.Delete("D:\\Temp\\pdf.pdf"); }
        }



        static void DelTmpPDF_2(string cFolder)
        {
            if (Directory.Exists(cFolder))
            {
                string[] filePaths = Directory.GetFiles(cFolder, "pdf*.pdf");
                foreach (string filePath in filePaths) File.Delete(filePath);
            }
        }


        static void DelTmpPDF()
        {
            DelTmpPDF_2("D:\\Temp");
            DelTmpPDF_2("Temp");
        }


        //  ลบไฟล์ต่างๆ หลังจาก วันตามที่ระบุ 
        static void DelTmpFLE2OTher(string cFolder,string cFor,int nDayCnt)
        {
            if (Directory.Exists(@cFolder))
            {
                string[] filePaths = Directory.GetFiles(@cFolder,cFor);
                foreach (string fileShow in filePaths)
                {
                    FileInfo fileaction = new FileInfo(fileShow);
                    if (fileaction.LastWriteTime < DateTime.Now.AddDays(nDayCnt*-1))
                        fileaction.Delete();
                }
            }
        }


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


        //
        static void Test4UtilPOK()
        {
            MessageBox.Show("โพลเดอร์ปัจจุบัน="+Directory.GetCurrentDirectory());
        }



        static void Main(string[] args)
        {
            string cpFlag = "", cpText1 = "", cpText2 = "";
            if (args.Length == 0)
            { UtilPOKReadMe(); return; }
            else
            {
                cpFlag = args[0]; cpText1 = "";
                for (int i = 1; i < args.Length; i++)
                { cpText1 = cpText1 + " " + args[i]; }
                for (int i = 2; i < args.Length; i++)
                { cpText2 = cpText2 + " " + args[i]; }
            }
            cpFlag = cpFlag.Trim().ToUpper();
            cpText1 = cpText1.Trim();
            cpText2 = cpText2.Trim();

            // Pok_Mess("cpFlag=" + cpFlag +",cpText1=" + cpText1 + ",cpText2=" + cpText2);


            switch (cpFlag)
            {
                case ("X"): return;
                case ("0"): Test4UtilPOK();break; // ทดสอบ
                case ("1"): ShowFLtxt(cpText1); break; //  แสดงข้อมูล ใน TEXT
                case ("2"): Make4Folder(cpText1, 0); break; // สร้าง โพลเดอร์ แบบเตือน
                case ("3"): Make4Folder(cpText1, 1); break; // สร้าง โพลเดอร์ แบบไม่เตือน
                case ("4"): ListPrinter2Txt(1); break; // แสดงเครื่องพิมพ์ ใน Text ไฟล์ 
                case ("5"): break; 
                case ("6"): ShowTxtOnSCR(cpText1); break; // แสดงข้อความทางหน้าจอ 
                case ("7"): SoundOpen(cpText1); break; // เปิดเพลงแบบต่อเนื่อง มีเตือน
                case ("8"): _SoundOpen(1, cpText1); break; // เปิดเพลง _sound.wav แบบต่อเนื่อง มีเตือน
                case ("9"): _SoundOpen(2, cpText1);  break; // เปิดเพลง _sound.wav แบบไม่ต่อเนื่อง ไม่มีเตือน
                case ("A"): _SoundAll(cpText1);  break; // เปิดไฟล์เสียงทีละไฟล์
                case ("B"): ChgTmpPDF2OTher(0,cpText1); break; // เปลี่ยนชื่อไฟล์ D:\Temp\pdf.pdf เป็นชื่ออื่นๆ
                case ("C"): ListPrinter2Txt(0); break; // แสดงเครื่องพิมพ์ ใน Text ไฟล์ 
                case ("D"): DelTmpPDF(); break; // ลบไฟล์ pdf.pdf ใน Folder ต่างๆ
                case ("E"): ChgTmpFLE2OTher(cpText1);  break; // เปลี่ยนชื่อไฟล์ rename.txt,rename.pdf,rename.xls เป็นชื่ออื่นๆ
                case ("F"):
                    DelTmpFLE2OTher(cpText1, "*.txt",180);
                    DelTmpFLE2OTher(cpText1, "*.pdf",180);
                    DelTmpFLE2OTher(cpText1, "*.jpg",180);
                    DelTmpFLE2OTher(cpText1, "*.tmp",7);
                    DelTmpFLE2OTher(cpText1, "*.bak",7);
                    DelTmpFLE2OTher(@"D:\BdPos\Bakdata", "F_*.dbf", 7);
                    DelTmpFLE2OTher(@"D:\BdPos\Bakdata", "F_*.cdx", 7);
                    DelTmpFLE2OTher(@"D:\BdPos\Bakdata", "C_*.dbf", 7);
                    DelTmpFLE2OTher(@"D:\BdPos\Bakdata", "C_*.cdx", 7);
                    DelTmpFLE2OTher(@"E:\PDF Backup", "PDF*.pdf", 7);
                    break; // ลบไฟล์ *.txt และ *.pdf ที่เกินจำนวนวันที่ระบุ
                case ("G"): ChgTmpPDF2OTher(1, cpText1); break; // เปลี่ยนชื่อไฟล์ D:\Temp\pdf.pdf เป็นชื่ออื่นๆ
                case ("H"): break;
                case ("I"): break;
            }

        }
    }
}
