using System;
using System.Drawing;
using System.Text;

namespace Sunny.UI.Demo
{
    public partial class FLineChart : UIPage
    {
        public FLineChart()
        {
            InitializeComponent();
        }

        private void uiSymbolButton1_Click(object sender, EventArgs e)
        {
            timer1.Stop();

            DateTime dt = new DateTime(2020, 10, 4);

            UILineOption option = new UILineOption();
            option.ToolTip.Visible = true;
            option.Title = new UITitle();
            option.Title.Text = "SunnyUI";
            option.Title.SubText = "LineChart";

            option.XAxisType = UIAxisType.DateTime;

            var series = option.AddSeries(new UILineSeries("Line1"));
            series.Add(dt.AddHours(0), 1.2);
            series.Add(dt.AddHours(1), 2.2);
            series.Add(dt.AddHours(2), 3.2);
            series.Add(dt.AddHours(3), cbContainsNan.Checked ? double.NaN : 4.2);
            series.Add(dt.AddHours(4), 3.2);
            series.Add(dt.AddHours(5), 2.2);
            series.Symbol = UILinePointSymbol.Square;
            series.SymbolSize = 4;
            series.SymbolLineWidth = 2;
            series.SymbolColor = Color.Red;
            series.ShowLine = !cbPoints.Checked;

            series = option.AddSeries(new UILineSeries("Line2", Color.Lime));
            series.Add(dt.AddHours(3), 3.3);
            series.Add(dt.AddHours(4), 2.3);
            series.Add(dt.AddHours(5), 2.3);
            series.Add(dt.AddHours(6), 1.3);
            series.Add(dt.AddHours(7), 2.3);
            series.Add(dt.AddHours(8), 4.3);
            series.Symbol = UILinePointSymbol.Star;
            series.SymbolSize = 4;
            series.SymbolLineWidth = 2;
            series.Smooth = true;
            series.ShowLine = !cbPoints.Checked;

            option.GreaterWarningArea = new UILineWarningArea(3.5);
            option.LessWarningArea = new UILineWarningArea(2.2, Color.Gold);

            option.YAxisScaleLines.Add(new UIScaleLine("上限", 3.5, Color.Red));
            option.YAxisScaleLines.Add(new UIScaleLine("下限", 2.2, Color.Gold));

            option.XAxis.Name = "日期";
            option.YAxis.Name = "数值";
            option.XAxis.AxisLabel.DateTimeFormat = "yyyy-MM-dd HH:mm";
            option.XAxis.AxisLabel.AutoFormat = false;
            option.YAxis.AxisLabel.DecimalCount = 1;
            option.YAxis.AxisLabel.AutoFormat = false;

            option.XAxisScaleLines.Add(new UIScaleLine(dt.AddHours(3).DateTimeString(), dt.AddHours(3), Color.Red));
            option.XAxisScaleLines.Add(new UIScaleLine(dt.AddHours(6).DateTimeString(), dt.AddHours(6), Color.Red));

            //设置X轴显示范围
            option.XAxis.SetRange(dt, dt.AddHours(8));
            LineChart.SetOption(option);
        }

        private void uiImageButton1_Click(object sender, EventArgs e)
        {
            LineChart.ChartStyleType = UIChartStyleType.Default;
        }

        private void uiImageButton2_Click(object sender, EventArgs e)
        {
            LineChart.ChartStyleType = UIChartStyleType.Plain;
        }

        private void uiImageButton3_Click(object sender, EventArgs e)
        {
            LineChart.ChartStyleType = UIChartStyleType.Dark;
        }

        private void LineChart_PointValue(object sender, UILineSelectPoint[] points)
        {
            StringBuilder sb = new StringBuilder();
            foreach (var point in points)
            {
                sb.Append(point.Name + ", " + point.Index + ", " + point.X + ", " + point.Y);
            }

            Console.WriteLine(sb.ToString());
        }

        private void uiSymbolButton2_Click(object sender, EventArgs e)
        {
            index = 0;
            UILineOption option = new UILineOption();
            option.ToolTip.Visible = true;
            option.Title = new UITitle();
            option.Title.Text = "SunnyUI";
            option.Title.SubText = "LineChart";
            var series = option.AddSeries(new UILineSeries("Line1"));
            series.Smooth = true;

            option.XAxis.AxisLabel.DecimalCount = 1;
            option.XAxis.AxisLabel.AutoFormat = false;
            option.YAxis.AxisLabel.DecimalCount = 1;
            option.YAxis.AxisLabel.AutoFormat = false;
            LineChart.SetOption(option);
            timer1.Start();
        }

        int index = 0;
        Random random = new Random();

        private void timer1_Tick(object sender, EventArgs e)
        {
            LineChart.Option.AddData("Line1", index, random.NextDouble() * 10);
            index++;

            if (index > 50)
            {
                LineChart.Option.XAxis.Max = index + 20;
                LineChart.Option.XAxis.MaxAuto = false;
                LineChart.Option.XAxis.Min = index - 50;
                LineChart.Option.XAxis.MinAuto = false;
            }

            LineChart.Refresh();
        }

        private void uiCheckBox1_CheckedChanged(object sender, EventArgs e)
        {
            uiSymbolButton1.PerformClick();
        }

        private void uiSymbolButton3_Click(object sender, EventArgs e)
        {
            timer1.Stop();

            UILineOption option = new UILineOption();
            option.ToolTip.Visible = true;
            option.Title = new UITitle();
            option.Title.Text = "SunnyUI";
            option.Title.SubText = "LineChart";

            var series = option.AddSeries(new UILineSeries("Line1"));
            series.Add(0, 1.2);
            series.Add(1, 2.2);
            series.Add(2, double.NaN);
            series.Add(3, 4.2);
            series.Add(4, 3.2);
            series.Add(5, 2.2);
            series.Symbol = UILinePointSymbol.Square;
            series.SymbolSize = 4;
            series.SymbolLineWidth = 2;
            series.SymbolColor = Color.Red;

            option.XAxis.Name = "日期";
            option.YAxis.Name = "数值";
            option.XAxis.AxisLabel.DateTimeFormat = "yyyy-MM-dd HH:mm";
            option.XAxis.AxisLabel.AutoFormat = false;
            option.YAxis.AxisLabel.DecimalCount = 1;
            option.YAxis.AxisLabel.AutoFormat = false;

            LineChart.SetOption(option);
        }

        private void uiCheckBox2_CheckedChanged(object sender, EventArgs e)
        {
            uiSymbolButton1.PerformClick();
        }

        private void uiSymbolButton3_Click_1(object sender, EventArgs e)
        {
            timer1.Stop();

            UILineOption option = new UILineOption();
            option.ToolTip.Visible = true;
            option.Title = new UITitle();
            option.Title.Text = "SunnyUI";
            option.Title.SubText = "LineChart";

            var series = option.AddSeries(new UILineSeries("Line1"));
            series.Add(0, 1.2);
            series.Add(1, 2.2);
            series.Add(2, 3.2);
            series.Add(3, 4.2);
            series.Add(4, 3.2);
            series.Add(5, 2.2);
            series.Symbol = UILinePointSymbol.Square;
            series.SymbolSize = 4;
            series.SymbolLineWidth = 2;
            series.SymbolColor = Color.Red;

            series = option.AddSeries(new UILineSeries("Line2", Color.Lime, true));
            series.Add(3, 13.3);
            series.Add(4, 12.3);
            series.Add(5, 12.3);
            series.Add(6, 11.3);
            series.Add(7, 12.3);
            series.Add(8, 14.3);
            series.Symbol = UILinePointSymbol.Star;
            series.SymbolSize = 4;
            series.SymbolLineWidth = 2;
            series.Smooth = true;

            option.XAxis.Name = "日期";
            option.YAxis.Name = "数值";
            option.Y2Axis.Name = "数值";

            option.YAxis.AxisLabel.DecimalCount = 1;
            option.YAxis.AxisLabel.AutoFormat = false;
            option.Y2Axis.AxisLabel.DecimalCount = 1;
            option.Y2Axis.AxisLabel.AutoFormat = false;

            option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.Red, Name = "上限", Value = 3.5 });
            option.Y2AxisScaleLines.Add(new UIScaleLine() { Color = Color.Gold, Name = "下限", Value = 12, DashDot = true });

            option.XAxisScaleLines.Add(new UIScaleLine() { Color = Color.Lime, Name = "3", Value = 3 });
            option.XAxisScaleLines.Add(new UIScaleLine() { Color = Color.Gold, Name = "6", Value = 6 });

            //设置坐标轴为自定义标签
            option.XAxis.CustomLabels = new CustomLabels(1, 1, 11);
            for (int i = 1; i <= 12; i++)
            {
                option.XAxis.CustomLabels.AddLabel(i + "月");
            }

            LineChart.SetOption(option);
        }
    }
}
