using AntDesign;
using Microsoft.AspNetCore.Components;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using wispro.sp.web.Services;
using Blazor.ECharts.Options;
using Blazor.ECharts.Options.Enum;
using L = Blazor.ECharts.Options.Series.Line;

namespace wispro.sp.web.Pages.Report
{
    public partial class StaffStaticsReport
    {
        private int iType = 0;
        private EChartsOption<L.Line> option;
        private Blazor.ECharts.Components.ELine chart;

        internal class TJType
        {
            public string Name { get; set; }

            public int value { get; set; }
        }
        List<TJType> Types = new List<TJType>
        {
            new TJType { value = 0,Name = "人员每月绩效统计" },
            new TJType { value = 2,Name = "人员每年绩效统计" },
            new TJType { value = 1,Name = "部门每月绩效统计" },
            new TJType { value = 3,Name = "部门每年绩效统计" },
            new TJType { value = 4,Name = "人员专案绩效统计" },
        };

        share.ChartDatas Datas = new share.ChartDatas()
        {
            Title = "初始化标题",
            Datas = new List<share.ChartData>() {
                new share.ChartData(){ type ="部门一", value =1, year="2022-01", CustomerType ="", CustomerYear=""},
                new share.ChartData(){ type ="部门一",value =5, year="2022-02",CustomerType ="", CustomerYear=""},
                new share.ChartData(){ type ="部门二", value =3, year="2022-01", CustomerType ="", CustomerYear=""},
                new share.ChartData(){ type ="部门二",value =4, year="2022-02",CustomerType ="", CustomerYear=""},
                new share.ChartData(){ type ="部门三",value =2.5, year="2022-02",CustomerType ="", CustomerYear=""}
            },
            ATitle = "部门",
            BTitle = "申诉月份"
        };

        private void GetOption()
        {
            
            if (Datas != null)
            {
                List<object> series = new List<object>();

                DataTable dt = Datas.GetTableData();

                foreach (DataRow row in dt.Rows)
                {
                    L.Line l = new L.Line();
                    l.Name = row[0].ToString();
                    List<double> data = new List<double>();

                    for (int i = 1; i < dt.Columns.Count; i++)
                    {
                        double dTem = 0;

                        if(!double.TryParse(row[i].ToString(), out dTem))
                        {
                            dTem = 0;
                        }

                        data.Add(dTem);
                    }

                    l.Data = data;

                    series.Add(l);
                }

                option  = new EChartsOption<L.Line>()
                {
                    //Legend = new() { 
                    //    Show = true,
                    //},
                    Toolbox = new()
                    {
                        Show = true,
                        Feature = new()
                        {
                            DataView = new()
                            {
                                ReadOnly = false
                            },
                            Restore = new(),
                            MagicType = new() {
                                Type = new()
                                {
                                    MagicTypeType.Bar,
                                    MagicTypeType.Line,
                                    MagicTypeType.Stack,
                                    MagicTypeType.Tiled,
                                }
                            },
                            SaveAsImage = new()
                            {
                                PixelRatio = 2,
                                Name = "保存图片"
                            }
                        }
                    },
                    Tooltip = new()
                    {
                        Trigger = TooltipTrigger.Item,
                        Formatter = "{a} <br/>{b}: {c}"
                    },
                    Title = new()
                    {
                        Text = Datas.Title
                    },
                    YAxis = new()
                    {
                        new()
                        {
                            Type = AxisType.Value,
                            Name = "绩效",
                            Position = PositionY.Start,
                            AxisLine = new()
                            {
                                Show = true,
                            }
                        }
                        
                    },
                    XAxis = new()
                    {
                        new()
                        {
                            Type = AxisType.Category,
                            Data = Datas.GetYear(),
                            Name = Datas.BTitle,
                            NameLocation = Location.Middle,
                            AxisLabel = new()
                            {
                                Show = true
                            },
                            
                        }
                    },
                    Series = series
                };
            } 
        }

        [Inject] ReportService reportService { get; set; }

        [Inject] MessageService msgService { get; set; }

        private bool _noIconLoading;
        private async Task OnButtonClick()
        {
            //option = null;
            await GetChartDatas();
            
            Console.WriteLine(chart.OptionRaw);
        }

        private async Task OnButtonClick_1()
        {
            Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(option, new JsonSerializerOptions()
            {
                DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
            }));

            await msgService.Success(chart.OptionRaw);
        }

        private async Task GetChartDatas()
        {
            _noIconLoading = true;
            Datas = await reportService.GetStaticReportData(iType);
            GetOption();
            StateHasChanged();
            _noIconLoading = false;
        }


        [Inject] protected IAuthService _authService { get; set; }

        protected async override Task OnInitializedAsync()
        {
            await _authService.CanVisitResource();
            await GetChartDatas();
            await base.OnInitializedAsync();
        }

        private EchartsEventArgs callbackArgs;
        private List<EventType> EventTypes = new List<EventType> { EventType.click };
        private void OnEchartsEvent(EchartsEventArgs args)
        {
            msgService.Info($"您点击了：[{args.SeriesName},{args.Name}]!");
            callbackArgs = args;
        }


    }
}
