package com.xxmassdeveloper.mpchartexample.view;

import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.charts.RadarChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.MarkerView;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.RadarData;
import com.github.mikephil.charting.data.RadarDataSet;
import com.github.mikephil.charting.data.RadarEntry;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
import com.github.mikephil.charting.interfaces.datasets.IDataSet;
import com.github.mikephil.charting.interfaces.datasets.IRadarDataSet;
import com.xxmassdeveloper.mpchartexample.R;
import com.xxmassdeveloper.mpchartexample.custom.RadarMarkerView;

import java.util.ArrayList;

/**
 * @Info 雷达图
 * @Auth Bello
 * @Time 18-3-5 上午9:53
 * @Ver
 */

public class MyRadarChart extends RelativeLayout {

    private Context context;
    private TextView titleText, unitText;
    private CheckBox showBtn;
    //图形控件
    private RadarChart mChart;
    //X轴显示的文字
    private String[] quarters ;
    //线图数据
    private ArrayList<RadarEntry> radarEntries1 = new ArrayList<>();
    private ArrayList<RadarEntry> radarEntries2 = new ArrayList<>();


    public MyRadarChart(Context context) {
        super(context);
        initView(context);
    }

    public MyRadarChart(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView(context);
    }

    /**
     * 加载UI布局
     * @param context
     */
    private void initView(Context context){
        this.context = context;
        View.inflate(context, R.layout.lt_my_radar, this);
        titleText = this.findViewById(R.id.chart_title_text);
        unitText = this.findViewById(R.id.chart_unit_text);
        showBtn = this.findViewById(R.id.chart_show_text);
        showBtn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                for (IDataSet set : mChart.getData().getDataSets()) {
                    set.setDrawValues(!set.isDrawValuesEnabled());
                }
                mChart.invalidate();
            }
        });

        mChart = this.findViewById(R.id.chart_radar);

    }


    /**
     * 加载数据
     * @param chartName
     * @param legend1
     * @param legend2
     * @param leftYUnit
     * @param quarters
     * @param radarEntries1
     * @param radarEntries2
     */
    public void setData(String chartName, String legend1, String legend2, String leftYUnit, String[] quarters, ArrayList<RadarEntry>
            radarEntries1, ArrayList<RadarEntry> radarEntries2) {
        this.quarters = quarters;
        this.radarEntries1 = radarEntries1;
        this.radarEntries2 = radarEntries2;

        //显示表的名称
        titleText.setText(chartName);

        //单位
        unitText.setText(leftYUnit);

        loadChart();

        loadData(legend1, legend2);
    }


    /**
     * 设置图形参数
     */
    private void loadChart() {
        mChart.setBackgroundColor(Color.WHITE);

        mChart.getDescription().setEnabled(false);

        mChart.setWebLineWidth(0.5f);
        mChart.setWebColor(Color.parseColor("#f7d4c9"));
        mChart.setWebLineWidthInner(1f);
        mChart.setWebColorInner(Color.parseColor("#f7d4c9"));
        mChart.setWebAlpha(100);

        // create a custom MarkerView (extend MarkerView) and specify the layout
        // to use for it
        MarkerView mv = new RadarMarkerView(context, R.layout.custom_marker_view);
        mv.setChartView(mChart); // For bounds control
//        mChart.setMarker(mv); // Set the marker to the chart

        mChart.animateXY(
                1400, 1400,
                Easing.EasingOption.EaseInOutQuad,
                Easing.EasingOption.EaseInOutQuad);

        XAxis xAxis = mChart.getXAxis();
        xAxis.setTextSize(9f);
        xAxis.setXAxisBackground(MyChartColorTheme.RED_COLOR);
        xAxis.setYOffset(10f);
        xAxis.setXOffset(10f);
        xAxis.setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                return MyRadarChart.this.quarters[(int) value % MyRadarChart.this.quarters.length];
            }
        });
        xAxis.setTextColor(Color.WHITE);

        YAxis yAxis = mChart.getYAxis();
//        yAxis.setLabelCount(5, false);
        yAxis.setTextSize(8f);
        yAxis.setTextColor(Color.parseColor("#888888"));
        yAxis.setAxisMinimum(0f);
//        yAxis.setAxisMaximum(5f);
        yAxis.setDrawLabels(true);

        Legend l = mChart.getLegend();
        l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
        l.setOrientation(Legend.LegendOrientation.VERTICAL);
        l.setDrawInside(false);
        l.setXEntrySpace(7f);
        l.setYEntrySpace(5f);
        l.setTextColor(Color.parseColor("#888888"));
    }

    /**
     * 加载图形数据
     *
     * @param legend1
     * @param legend2
     */
    private void loadData(String legend1, String legend2) {
        ArrayList<IRadarDataSet> sets = new ArrayList<>();

        if (null != radarEntries1) {
            RadarDataSet set1 = new RadarDataSet(radarEntries1, legend1);
            set1.setColor(MyChartColorTheme.TGAY_COLOR);
            set1.setFillColor(MyChartColorTheme.TGAY_COLOR);
            set1.setDrawFilled(true);
            set1.setFillAlpha(100);
            set1.setLineWidth(0.2f);
            set1.setDrawHighlightCircleEnabled(true);
            set1.setDrawHighlightIndicators(false);

            sets.add(set1);
        }

        if (null != radarEntries2) {
            RadarDataSet set2 = new RadarDataSet(radarEntries2, legend2);
            set2.setColor(MyChartColorTheme.RED_COLOR);
            set2.setFillColor(MyChartColorTheme.RED_COLOR);
            set2.setDrawFilled(true);
            set2.setFillAlpha(100);
            set2.setLineWidth(0.2f);
            set2.setDrawHighlightCircleEnabled(true);
            set2.setDrawHighlightIndicators(false);

            sets.add(set2);
        }


        RadarData data = new RadarData(sets);
        data.setValueTextSize(8f);
        data.setDrawValues(false);
        data.setValueTextColor(Color.parseColor("#FF6633"));

        mChart.setData(data);
        mChart.invalidate();
    }

}
