package com.unis.sxzcl.widget;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;

import androidx.core.content.ContextCompat;

import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.data.PieEntry;
import com.github.mikephil.charting.formatter.ValueFormatter;
import com.unis.sxzcl.R;
import com.xyxsbj.mylibrary.tool.DPTool;

import java.math.BigDecimal;
import java.util.List;

/**
 * 包名: com.unis.sxzcl.widget
 * 类名: MyBarChart
 * 作用描述:
 * 创建人: mQ
 * 创建时间: 2020/11/17 10:03
 * 更新人:
 * 更新时间: 2020/11/17 10:03
 * 更新说明:
 * 版本号: 1.0
 */
public class MyPieChart {

    private Context mContext;

    private PieChart mPieChart;

    List<String> mLabels;

    public MyPieChart(Context context, PieChart pieChart) {
        mContext = context;
        mPieChart = pieChart;
        initView();
    }

    private void initView() {
        //边距
        mPieChart.setExtraOffsets(0, 15, 0, 15);
        // 设置pieChart图表展示动画效果
        mPieChart.animateY(1000);
        //无数据时显示文字
        mPieChart.setNoDataText("暂无数据");
        mPieChart.setNoDataTextColor(getColorForResId(R.color.colorText55));
        // 饼图上是否显示标签文字
        mPieChart.setDrawEntryLabels(false);
        //标签文字颜色
        mPieChart.setEntryLabelColor(getColorForResId(R.color.colorText55));
        //标签文字大小
        mPieChart.setEntryLabelTextSize(getTextSize(R.attr.textSizeX));
        //隐藏说明
        mPieChart.getDescription().setEnabled(false);
        //不可旋转
//        mPieChart.setRotationEnabled(false);
        //是否使用百分比显示
        mPieChart.setUsePercentValues(true);

        // 设置 pieChart 内部圆环属性
        //是否显示PieChart内部圆环(true:下面属性才有意义)
        mPieChart.setDrawHoleEnabled(true);
        //设置PieChart内部圆的半径(这里设置28.0f)
//        mPieChart.setHoleRadius(28f);
        //设置PieChart内部透明圆的半径(这里设置31.0f)
//        mPieChart.setTransparentCircleRadius(31f);
        //设置PieChart内部透明圆与内部圆间距(31f-28f)填充颜色

//        mPieChart.setTransparentCircleColor(Color.BLACK);
        //设置PieChart内部透明圆与内部圆间距(31f-28f)透明度[0~255]数值越小越透明
//        mPieChart.setTransparentCircleAlpha(50);
        //设置PieChart内部圆的颜色
//        mPieChart.setHoleColor(Color.WHITE);
        //是否绘制PieChart内部中心文本（true：下面属性才有意义）
        mPieChart.setDrawCenterText(true);
        //设置PieChart内部圆文字的字体样式
//        mPieChart.setCenterTextTypeface(mTfLight);
        //设置PieChart内部圆文字的内容
        mPieChart.setCenterText("");
        //设置PieChart内部圆文字的大小
        mPieChart.setCenterTextSize(getTextSize(R.attr.textSizeX));
        //设置PieChart内部圆文字的颜色
        mPieChart.setCenterTextColor(getColorForResId(R.color.colorText1));
        //最小占用
        mPieChart.setMinAngleForSlices(20f);

        //设置图例
        mPieChart.getLegend().setEnabled(false);
//        Legend legend = mPieChart.getLegend();
//        legend.setTextColor(getColorForResId(R.color.colorText1));
//        legend.setTextSize(13f);
        //设置图例是在文字的左边还是右边
//        legend.setDirection(Legend.LegendDirection.LEFT_TO_RIGHT);
        //排列方式 纵向
//        legend.setOrientation(Legend.LegendOrientation.VERTICAL);
        //设置图例为圆形
//        legend.setForm(Legend.LegendForm.CIRCLE);
//        legend.setFormSize(12);
//        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.CENTER);
//        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
//        legend.setFormToTextSpace(5);
//        legend.setXOffset(40);
    }

    public void showChart(List<PieEntry> values, String name) {
        showChart(values, name, null);
    }

    public void showChart(List<PieEntry> values, String name, List<Integer> colors) {
        //设置PieChart内部圆文字的内容
        mPieChart.setCenterText(name);
        PieDataSet pieDataSet = new PieDataSet(values, name);

        if (colors == null) {
            //分别为每个分组设置颜色
            pieDataSet.setColors(
                    Color.parseColor("#47C7E8"),
                    Color.parseColor("#A5E7BA"),
                    Color.parseColor("#F56D91"),
                    Color.parseColor("#FA9C80"),
                    Color.parseColor("#968FEB"));
        } else {
            pieDataSet.setColors(colors);
        }
        pieDataSet.setUsingSliceColorAsValueLineColor(true);

        //设置饼块选中时偏离饼图中心的距离
        pieDataSet.setSelectionShift(5f);
        //设置饼块与饼块之间的距离
        pieDataSet.setSliceSpace(3f);
        //设置在饼图上显示的百分数颜色
        pieDataSet.setValueTextColor(getColorForResId(R.color.colorText1));
        //设置在饼图上显示文字的大小
        pieDataSet.setValueTextSize(getTextSize(R.attr.textSizeX));
        //字体加粗
//        pieDataSet.setValueTypeface(Typeface.DEFAULT_BOLD);
        //标签显示在外面
        pieDataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
        //设置连接线显示在外面
        pieDataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
        //设置数据连接线的长度是否可变
        pieDataSet.setValueLineVariableLength(true);
        //设置连接线距离饼图的距离，注意为百分数，1-100
        pieDataSet.setValueLinePart1OffsetPercentage(100f);

        //设置连接线的长度，一般取0-1的值即可
        pieDataSet.setValueLinePart1Length(0.5f);
        pieDataSet.setValueLinePart2Length(0.2f);
        //设置连接线的宽度
//        pieDataSet.setValueLineWidth(2f);
        //设置连接线的颜色
        pieDataSet.setValueLineColor(getColorForResId(R.color.colorLine3));

        pieDataSet.setValueFormatter(new ValueFormatter() {
            @Override
            public String getPieLabel(float value, PieEntry pieEntry) {
                // 百分比 四舍五入保留两位小数
                BigDecimal decimal = new BigDecimal(value);
                String percent = decimal.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
                //格式 数值(百分比)  0(0.0%)
                return pieEntry.getLabel() + " " + (int) pieEntry.getValue() + "(" + percent + "%)";
            }

        });

        PieData pieData = new PieData(pieDataSet);

        //填充数据
        mPieChart.setData(pieData);
    }

    private int getColorForResId(int resId) {
        return ContextCompat.getColor(mContext, resId);
    }

    private int getTextSize(int resId) {
        TypedArray typedArray = mContext.getTheme().obtainStyledAttributes(new int[]{resId});
        return DPTool.px2sp(mContext, typedArray.getDimension(0, 0));
    }


}
