using Itrycn_Project2;
using ryCommon;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace Itrycn_Project2
{
    public partial class FrmScan : RySkins.SKinForm
    {
        string[] prog_args;
        public FrmScan(string[] args)
        {
            InitializeComponent();
            prog_args = args;
            //配置软件信息
            notifyIcon1.Text = Soft_ConstInfo.Soft_Title;
            Text = Soft_ConstInfo.Soft_Title + " V" + RySoft.VersionStr;
            if (!Soft_ConstInfo.ShowTray) { notifyIcon1.Visible = false; }
            if (!Soft_ConstInfo.DonateVisabled) { 捐助ToolStripMenuItem.Text = "关于"; }
            if (Soft_ConstInfo.Soft_Url.Length == 0) { 打开官网ToolStripMenuItem.PerformClick(); }
            notifyIcon1.Icon = Icon;
            OlvLog.AspectName = "LogText";
            OlvLogTime.AspectName = "LogTime";
        }

        private void 显示主窗体ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Normal;
            var topmost = this.TopMost;
            this.TopMost = true;
            this.Show();
            this.TopMost = topmost;
        }

        private void 退出软件ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void FrmStart_Shown(object sender, EventArgs e)
        {
            ryCommon.Ini ini = new Ini(Soft_ConstInfo.UserDataFolder + "\\Win.dat");
            ini.WriteIni(Soft_ConstInfo.Soft_Id, "hwnd", Handle.ToInt32());
            if (prog_args.Length >= 1)
            {
                //如果是自启动,并且开启了右下角托盘图标,则隐藏自身。
                if (prog_args[0] == Soft_ConstInfo.Soft_Pram && Soft_ConstInfo.ShowTray)
                    this.Hide();
            }
        }

        private void FrmStart_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (Soft_ConstInfo.ShowTray && Public_Config.HideByCloseBtn && e.CloseReason== CloseReason.UserClosing)
            {
                e.Cancel = true;
                this.Hide();
                notifyIcon1.ShowBalloonTip(3000, Soft_ConstInfo.Soft_Title, "软件已经最小化到此处,请右击托盘图标进行关闭。", ToolTipIcon.Info);
                return;
            }
            if (!Soft_MemInfo.IsCanCloseForm)
            {
                e.Cancel = true;
                MessageBox.Show("当前还有操作正在运行,请稍后关闭软件。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        protected override void WndProc(ref System.Windows.Forms.Message msg)
        {
            switch (msg.Msg)
            {
                case 17189: //处理消息
                    {
                        #region 激活窗体
                        switch (msg.WParam.ToInt32())
                        {
                            case 100://
                                #region 显示界面
                                if ((int)msg.LParam.ToInt32() == 100)
                                {
                                    this.Show();
                                    this.WindowState = FormWindowState.Normal;
                                    this.Top = (Screen.PrimaryScreen.WorkingArea.Height - this.Height) / 2;
                                    this.Left = (Screen.PrimaryScreen.WorkingArea.Width - this.Width) / 2;
                                    //RyForm.SetActiveWindow(Handle);
                                    RyForm.BringToTop(Handle);
                                    显示主窗体ToolStripMenuItem.PerformClick();
                                    this.BringToFront();
                                    this.Select();
                                    this.Focus();
                                    RyForm.BringToTop(Handle);
                                }
                                #endregion
                                break;
                        }
                        #endregion
                    }
                    break;
                default:
                    base.WndProc(ref msg);//调用基类函数处理非自定义消息。
                    break;
            }
        }

        private void 捐助ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Soft_ConstInfo.DonateVisabled)
            {
                FrmAbout frm = new FrmAbout();
                frm.ShowDialog();
                frm.Dispose();
            }
            else
            {
                RySkins.Msg.ShowMsg(Soft_ConstInfo.AboutText.Replace("#softname#", Soft_ConstInfo.Soft_Title).Replace("#ver#", "V" + RySoft.VersionStr), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }


        private void 打开官网ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ryCommon.RyFiles.OpenUrl(Soft_ConstInfo.Soft_Url);
        }

        private void FrmStart_Load(object sender, EventArgs e)
        {
            //Itrycn_Project.Itrycn_Db.CreateTable();
            LiveUpdate.RyUpdate update = new LiveUpdate.RyUpdate(Soft_ConstInfo.Update_Url);
            update.CheckUpdate();
        }
        /// <summary>
        /// 添加日志
        /// </summary>
        /// <param name="text"></param>
        private void AddLogs(string text)
        {
            this.Invoke(new Action(() =>
            {
                LvLogs.AddObject(new LogInfo() { LogText = text, LogTime = DateTime.Now.ToString("yyyy-MM-dd dddd HH:mm:ss") });
                TabLogs.Text = "日志("+LvLogs.GetItemCount()+")";
            }));
        }
        bool IsRunning = false;
        bool IsExit = false;
        private void BtnScan_Click(object sender, EventArgs e)
        {
            if (IsRunning) { IsExit = true; return; }
            IsRunning = true;
            Soft_MemInfo.IsCanCloseForm = false;
            BtnScan.Text = "停止";
            LvCbResult.ClearObjects();
            LvLogs.ClearObjects();
            TabLogs.Text = "日志(" + LvLogs.GetItemCount() + ")";
            TsState.Text = "状态:正在加载数据...";
            OlvGameName.Text = "游戏名[" + LvCbResult.GetItemCount() + "]";
            Thread th = new Thread(Start);
            th.Start();
            void Start()
            {
                //RyWeb.QuickWeb ry3h3 = new RyWeb.QuickWeb();
                //将扫描的代码写在下面

                //↑将扫描的代码写在上面
                IsExit = false;
                IsRunning = false;
                Soft_MemInfo.IsCanCloseForm = true;
                this.Invoke(new Action(() =>
                {
                    //LvCbResult.AddObjects(list);
                    OlvGameName.Text = "游戏名[" + LvCbResult.GetItemCount() + "]";
                    TsState.Text = "状态:扫描完毕,共发现" + LvCbResult.GetItemCount() + "个.";
                    BtnScan.Text = "扫描";
                }));
            }
        }
        private void 复制日志信息ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (LvLogs.SelectedObject == null) { return; }
            var item = (LogInfo)LvLogs.SelectedObject;
            RyFiles.CopyToClip(item.LogText);
        }
        /// <summary>
        /// 日志信息
        /// </summary>
        class LogInfo
        {
            public string LogText { get; set; }
            public string LogTime { get; set; }
        }
    }
}
