using LolDataRequestLib;
using MongoDB.Bson;
using MongoDB.Bson.IO;
using MongoDB.Bson.Serialization;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace requestTestForm
{
    public partial class Form1 : Form, IGameTimeEventDrop
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void errorReceivedByWorker(DBDefine.요청데이터분류 익셉션나온데이터분류, string 익셉션내용)
        {
            throw new NotImplementedException();
        }


        Timer mTimer = new Timer();

        private void button1_Click(object sender, EventArgs e)
        {

            DataManager.getInstance().setCallback(this);

            DataManager.getInstance().IsupdateWorkersWork = true; ;

            DataManager.getInstance().mPlatformGameID = textBox1.Text;

            mTimer.Interval = 1000;

            mTimer.Tick += dataTick;

            mTimer.Start();


        }

        void dataTick(object d, EventArgs e)
        {
            dataGridView1.DataSource = DataManager.getInstance().라이브데이터요청(DBDefine.요청데이터분류.밴데이터).Tables[0];

            //20210531이렇게 할 수도 있습니다.
            //dataGridView1.DataSource = DataManager.getInstance().라이브데이터요청(DBDefine.요청데이터분류.밴데이터).Tables[DBDefine.요청데이터분류.밴데이터.GetStringValue()];

            dataGridView2.DataSource = DataManager.getInstance().라이브데이터요청(DBDefine.요청데이터분류.픽데이터).Tables[0];
            grid골드획득선수.DataSource = DataManager.getInstance().라이브데이터요청(DBDefine.요청데이터분류.현재골드량선수).Tables[0];
            grid누적데미지.DataSource = DataManager.getInstance().라이브데이터요청(DBDefine.요청데이터분류.현재데미지량선수).Tables[0];
            grid경험치레벨.DataSource = DataManager.getInstance().라이브데이터요청(DBDefine.요청데이터분류.경험치레벨).Tables[0];
            grid룬.DataSource = DataManager.getInstance().라이브데이터요청(DBDefine.요청데이터분류.룬데이터).Tables[0];

            ////미완성
            grid오브젝트킬.DataSource = DataManager.getInstance().라이브데이터요청(DBDefine.요청데이터분류.오브젝트킬).Tables[0];
            grid골드차.DataSource = DataManager.getInstance().라이브데이터요청(DBDefine.요청데이터분류.골드차이팀).Tables[0];
            //grid타워.DataSource = DataManager.getInstance().라이브데이터요청(DBDefine.요청데이터분류.타워철거전체).Tables[0];
            ////grid용.DataSource = DataManager.getInstance().한타딜량요청(1, 200).Tables[0];
            //grid용.DataSource = DataManager.getInstance().라이브데이터요청(DBDefine.요청데이터분류.용리스폰).Tables[0];

            ////20210611 플레이어오브더게임부분
            grid용.DataSource = DataManager.getInstance().라이브데이터요청(DBDefine.요청데이터분류.용리스폰).Tables[0];

            ////20210611 한타딜량 시간범위 부분
            /// 시작초가 0으로 오면 null을 리턴
            //grid용.DataSource = DataManager.getInstance().한타딜량요청(1, 200).Tables[0];



            ///20210531 경기종료데이터는 이렇게 하나씩 따시면 됩니다.
            ///킬뎃어시, 타워철거전체, 오브젝트킬

            DataSet 가져온데이터셋 = DataManager.getInstance().라이브데이터요청(DBDefine.요청데이터분류.경기종료정보);
            //grid타워.DataSource = 가져온데이터셋.Tables[DBDefine.요청데이터분류.경기종료정보.GetStringValue()];
            //grid타워.DataSource = 가져온데이터셋.Tables[DBDefine.요청데이터분류.킬뎃어시.GetStringValue()];
            //grid타워.DataSource = 가져온데이터셋.Tables[DBDefine.요청데이터분류.타워철거전체.GetStringValue()];
            //grid용.DataSource = 가져온데이터셋.Tables[DBDefine.요청데이터분류.오브젝트킬.GetStringValue()];
            //grid타워.DataSource = 가져온데이터셋.Tables[DBDefine.요청데이터분류.밴데이터.GetStringValue()];
            //grid타워.DataSource = 가져온데이터셋.Tables[DBDefine.요청데이터분류.골드차이팀.GetStringValue()];


        }

        private void button2_Click(object sender, EventArgs e)
        {
            //Console.WriteLine(DataManager.getInstance().requestServerForUpdate(textBox2.Text, textBox3.Text).ToString());

            textBox4.Text = DataManager.getInstance().requestServerForUpdate(textBox2.Text, textBox3.Text, true).ToString();
            textBox5.Text = DataManager.getInstance().mPlatformGameID;
        }

        public void 드래곤리스폰시간(string 용종류, int 남은시간_단위_초)
        {
            Console.WriteLine(용종류 + "----" + 남은시간_단위_초);
        }

        public void 오브젝트리스폰시간(string 오브젝트잡은팀, string 오브젝트종류, int 게임시간_단위_초)
        {
            Console.WriteLine(오브젝트잡은팀 + "++++" + 오브젝트종류 + "++++" + 게임시간_단위_초);
        }

        public void 억제기리스폰시간(DataTable 터진억제기정보)
        {
            Console.WriteLine("억제기터짐" + 터진억제기정보.Rows.Count);
        }

        public void 현재게임시간(int 초)
        {
            this.Invoke(new MethodInvoker(() => { textBox6.Text = (초 / 60).ToString() + " : " + (초 % 60); }));
        }

        private void button3_Click(object sender, EventArgs e)
        {


            DataManager.getInstance().setCallback(this);
            DataManager.getInstance().timerStart();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            DataManager.getInstance().timerStop();
        }

        private void button5_Click(object sender, EventArgs e)
        {
            DataManager.getInstance().setGameTime(Convert.ToInt32(textBox6.Text));
        }

        public void 오브젝트버프시간(string 오브젝트잡은팀, string 오브젝트종류, int 게임시간_단위_초, int 파워플레이)
        {
            ////20210611  파워플레이부분
            Console.WriteLine(오브젝트잡은팀 + "_" + 오브젝트종류 + "_" + 게임시간_단위_초 + "_" + 파워플레이);
        }

        private void button6_Click(object sender, EventArgs e)
        {
            DataManager.getInstance().resetDBAddress(textBox6.Text);
        }

        public void 한타딜량실시간(DataTable 한타딜량선수별)
        {

            ////20210611 한타딜량부분
            Console.WriteLine("한타딜량" + 한타딜량선수별.Rows.Count);
            this.Invoke(new MethodInvoker(() => { grid용.DataSource = 한타딜량선수별; }));
        }

        private void btn한타딜량시작_Click(object sender, EventArgs e)
        {
            DataManager.getInstance().초당한타딜량리턴시작();
        }

        private void btn한타딜량종료_Click(object sender, EventArgs e)
        {
            DataManager.getInstance().초당한타딜량리턴종료();
        }

    }
}
