using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }
        string Firmware_str = "";

        private void button1_Click(object sender, EventArgs e)
        {
            //OpenFileDialog fileDialog = new OpenFileDialog();
            //fileDialog.Multiselect = true;
            //fileDialog.Title = "请选择文件";
            //fileDialog.Filter = "程序文件(*.bin)|*.bin|所有文件(*.*)|*.*";
            //if (fileDialog.ShowDialog() == DialogResult.OK)
            //{
            //    string file = fileDialog.FileName;
            //    File_Text.Text = file;
            //}
            string str = System.Windows.Forms.Application.StartupPath;
            //创建对象
            OpenFileDialog ofg = new OpenFileDialog();
            //判断保存的路径是否存在
            if (!Directory.Exists(@str))
            {
                //创建路径
                Directory.CreateDirectory(@str);
            }
            //设置默认打开路径(绝对路径)
            ofg.InitialDirectory = @str;
            //设置打开标题、后缀
            ofg.Title = "请选择导入dat文件";
            ofg.Filter = "dat文件|*.dat";
            string path = "";
            if (ofg.ShowDialog() == DialogResult.OK)
            {
                //得到打开的文件路径(包括文件名)
                path = ofg.FileName.ToString();
                Console.WriteLine("打开文件路径是:" + path);
                
                   File_Text.Text = ofg.FileName.ToString();
                // File_Text.Text = ofg.FileNames[0].ToString();
                // file_open(@str+"/download.bat");
                 Firmware_str = System.IO.Path.GetFileName(ofg.FileName);
                 Console.WriteLine( System.IO.Path.GetFileName(ofg.FileName));                          //得到文件
            }
            else if (ofg.ShowDialog() == DialogResult.Cancel)
            {
                MessageBox.Show("未选择打开文件!");
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string str = System.Windows.Forms.Application.StartupPath;
            Console.WriteLine(str);
            Console.Write(bat_file_str);
            Console.WriteLine("十六进制 CC的十进制表示: " + Convert.ToInt16("CC", 16)+ Convert.ToInt16("CC", 16).ToString("X"));
        }

        string bat_file_str = "cls\n"+
"e k&e p\n" +
"e k&e p\n" +
"e k&e p\n" +
"e k&e p\n" +
"e k&e p\n" +
"e k&e p\n" +
"e k&e p\n" +
"e pu\n" +
"e fr 0 10\n" +
"e fe 10\n" +
"e fp file.dat\n" +
"e fr 0 20\n" +
"e ku\n" +
"e k\n" +
"echo downloadOK\n" +
"timeout /T 3 /NOBREAK";
        public void writeBATFile(string filePath,string fileContent)
        {
           // string filePath = "D:\\test\\testChange.bat";

            if (!File.Exists(filePath))

            {
                FileStream fs1 = new FileStream(filePath, FileMode.Create, FileAccess.Write);//创建写入文件

                StreamWriter sw = new StreamWriter(fs1);

                sw.WriteLine(fileContent);//开始写入值

                sw.Close();

                fs1.Close();

            }

            else

            {
                FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Write);

                StreamWriter sr = new StreamWriter(fs);

                sr.WriteLine(fileContent);//开始写入值

                sr.Close();

                fs.Close();

            }

        }
        byte[] FileByteBuffer = new byte[1024 * 1024];
        private void file_open(string path)
        {
            //打开系统日志文件
            if (!File.Exists(path))
            {
                // 目录/文件不存在,建立目录/文件
                File.CreateText(path);
            }
            //打开文件
            //FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
            //通过指定字符编码方式可以实现对汉字的支持,否则在用记事本打开查看会出现乱码
            StreamReader m_streamReader = new StreamReader(path, Encoding.GetEncoding("GB2312"));
            //使用StreamReader类来读取文件
            m_streamReader.BaseStream.Seek(0, SeekOrigin.Begin);

            // 从数据流中读取每一行,直到文件的最后一行,并在richTextBox1中显示出内容

           // this.textBox1.Text = "";
            //string strEnd = m_streamReader.ReadToEnd();
            //Console.WriteLine(strEnd);
           
            string strLine = m_streamReader.ReadLine();
            int Cnt = 0;
           

            while (strLine != null)
            {
                FileByteBuffer[Cnt] = Convert.ToByte(strLine, 16);
                //Console.WriteLine("dat:" + strLine + " len:" + strLine.Length+" "+FileByteBuffer[Cnt].ToString("X"));
                Cnt++;
                strLine = m_streamReader.ReadLine();
            }
            Console.WriteLine(Cnt);
            //C# 创建二进制文件并写入
            BinaryWriter bw = new BinaryWriter(new FileStream("mydata.bin", FileMode.Create));
            bw.Write(FileByteBuffer,0, Cnt);//写入一个字符串
            bw.Close();
            //关闭此StreamReader对象
            MessageBox.Show("转换完毕!");

            //关闭此StreamReader对象

            m_streamReader.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if(!(Firmware_str!=""&& Firmware_str.IndexOf(".dat")!=-1))
            {
                MessageBox.Show("未选择打开dat文件!");
                return;
            }
            string app_path_str = System.Windows.Forms.Application.StartupPath;
            string writeStr= bat_file_str.Replace("file.dat", Firmware_str);
            Console.WriteLine(writeStr);
            writeBATFile(app_path_str+ "/user_download.bat", writeStr);
            Process proc = null;
            try
            {
                string targetDir = string.Format(@app_path_str);//this is where mybatch.bat lies
                proc = new Process();
                proc.StartInfo.WorkingDirectory = targetDir;
                proc.StartInfo.FileName = "user_download.bat";
                proc.StartInfo.Arguments = string.Format("10");//this is argument
                proc.StartInfo.CreateNoWindow = false;
                proc.Start();
                proc.WaitForExit();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception Occurred :{0},{1}", ex.Message, ex.StackTrace.ToString());
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (File_Text.Text != "")
            {
                file_open(File_Text.Text);

            }
            else {
                MessageBox.Show("未选择打开dat文件!");
            }
            
        }
        string read_mac =
"e pu\n" +
"e fr 18c6  10\n" +
"timeout /T 3 /NOBREAK";
        private void button4_Click(object sender, EventArgs e)
        {
            string app_path_str = System.Windows.Forms.Application.StartupPath;
            string writeStr = bat_file_str.Replace("file.dat", Firmware_str);
            Console.WriteLine(writeStr);
            writeBATFile(read_mac + "/readmac.bat", writeStr);

            Process proc = null;
            try
            {
                string targetDir = string.Format(@app_path_str);//this is where mybatch.bat lies
                proc = new Process();
                proc.StartInfo.WorkingDirectory = targetDir;
                proc.StartInfo.FileName = "user_download.bat";
                proc.StartInfo.Arguments = string.Format("10");//this is argument
                proc.StartInfo.CreateNoWindow = false;
                proc.Start();
                proc.WaitForExit();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception Occurred :{0},{1}", ex.Message, ex.StackTrace.ToString());
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {

        }
    }
}