using MongoDB.Bson;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LolDataRequestLib.ResponseData
{
    class 밴데이터 : IResponseData
    {

      
        public DataTable 디비데이터를데이터테이블로만듬()
        {
            List<DataTable> rtnValue = new List<DataTable>();

            DataTable 밴리스트테이블 = new DataTable(DBDefine.요청데이터분류.밴데이터.ToString());
            rtnValue.Add(밴리스트테이블);

            //추가 시작
            // 1) 순번 컬럼을 int로 (정렬/비교 안정화)
            밴리스트테이블.Columns.Add("순번", typeof(int));
            밴리스트테이블.Columns.Add("챔피언ID");
            밴리스트테이블.Columns.Add("챔피언이름");
            밴리스트테이블.Columns.Add("팀");

            // 여기부터 새로 넣기
            var dm = DataManager.getInstance();

            if (dm.밴픽데이터 == null || dm.밴픽데이터.IsBsonNull || !dm.밴픽데이터.IsBsonDocument)
            {
                밴리스트테이블.TableName = DBDefine.요청데이터분류.밴데이터.ToString();
                return 밴리스트테이블;
            }

            var doc = dm.밴픽데이터.AsBsonDocument;

            if (!doc.TryGetValue("bannedChampions", out var banned) || banned == null || banned.IsBsonNull || !banned.IsBsonArray)
            {
                밴리스트테이블.TableName = DBDefine.요청데이터분류.밴데이터.ToString();
                return 밴리스트테이블;
            }

            //List<BsonValue> 밴데이터 = banned.AsBsonArray.ToList();
             

            List<BsonValue> 밴데이터 = dm.밴픽데이터["bannedChampions"].AsBsonArray.ToList();
            var turns = 밴데이터.Select(x => x["pickTurn"].ToInt32()).ToList();

            bool isGlobalTurnFormat = turns.Any(t => t >= 13);                  // 1~6 + 13~16
            bool isDirectSlotFormat = turns.Distinct().Count() == turns.Count    // 1~10 같은 직접 슬롯
                                      && turns.All(t => t >= 1 && t <= 10);

            foreach (BsonValue item in 밴데이터)
            {
                DataRow bufRow = 밴리스트테이블.NewRow();
                 
                int pickTurn = item["pickTurn"].ToInt32();
                int teamId = item["teamID"].ToInt32();
                int slot = 0;

                /*
                if (isDirectSlotFormat)
                {
                    slot = pickTurn;
                }
                else if (isGlobalTurnFormat)
                {
                    if (pickTurn >= 1 && pickTurn <= 6) slot = pickTurn;
                    else if (pickTurn >= 13 && pickTurn <= 16) slot = pickTurn - 6; // 13~16 => 7~10
                    else slot = 0;
                }
                else
                {
                    int key = pickTurn + teamId;
                    if (!dm.밴픽순서테이블.TryGetValue(key, out slot))
                        slot = 0;
                }
                */

                //if (slot == 0) slot = 밴리스트테이블.Rows.Count + 1;
                //bufRow["순번"] = slot;
                bufRow["순번"] = pickTurn;
                int selectedChamp = item["championID"].ToInt32();
                bufRow["챔피언ID"] = selectedChamp;

                bufRow["팀"] = item["teamID"].ToInt32();

                if (selectedChamp > 0)
                    bufRow["챔피언이름"] = dm.mChampionTable[selectedChamp].champNameKOR;
                else if (selectedChamp == -1)
                    bufRow["챔피언이름"] = "선택없음";

                밴리스트테이블.Rows.Add(bufRow);
            }
            // 여기까지 새로 넣기
             

            // 5) 정렬도 int 기준으로
            if (밴리스트테이블.Rows.Count > 0)
            {
                밴리스트테이블 = 밴리스트테이블.AsEnumerable()
                    .OrderBy(r => r.Field<int>("순번"))
                    .CopyToDataTable();
            }

            ////추가 끝


            //밴리스트테이블.Columns.Add("순번");
            //밴리스트테이블.Columns.Add("챔피언ID");
            //밴리스트테이블.Columns.Add("챔피언이름");

            //if (DataManager.getInstance().밴픽데이터 == null)
            //{
            //    return 밴리스트테이블;
            //}

            //List<BsonValue> 밴데이터 = DataManager.getInstance().밴픽데이터["bannedChampions"].AsBsonArray.ToList();


            //foreach (BsonValue item in 밴데이터)
            //{
            //    DataRow bufRow = 밴리스트테이블.NewRow();

            //    //Console.WriteLine(item["pickTurn"].ToInt32() + item["teamID"].ToInt32());

            //    if (DataManager.getInstance().isNewBanPick)
            //    {
            //        bufRow["순번"] = item["pickTurn"].ToInt32();
            //    }
            //    else
            //    {
            //        bufRow["순번"] = DataManager.getInstance().밴픽순서테이블[item["pickTurn"].ToInt32() + item["teamID"].ToInt32()];
            //    } 
                

            //    int selectedChamp = item["championID"].ToInt32();
            //    if (selectedChamp > 0 )
            //    {
            //        bufRow["챔피언이름"] = DataManager.getInstance().mChampionTable[selectedChamp];
            //    }
            //    if (selectedChamp == -1)
            //    {
            //        bufRow["챔피언이름"] = "선택없음";
            //    }
            //    bufRow["챔피언ID"] = selectedChamp;




            //    밴리스트테이블.Rows.Add(bufRow);
            //}


            //if (밴리스트테이블.Rows.Count > 0)
            //{
            //    밴리스트테이블 = 밴리스트테이블.AsEnumerable().OrderBy(r => Convert.ToInt32(r.Field<string>("순번"))).CopyToDataTable();
            //}

            

            밴리스트테이블.TableName = DBDefine.요청데이터분류.밴데이터.ToString();
            return 밴리스트테이블;

        }
    }
}