package com.github.wuxudong.rncharts.charts;

import com.euler.yb.android.charts.charts.EulerCombinedChart;
import com.euler.yb.android.charts.formatter.XFormatter;
import com.euler.yb.android.charts.markers.EulerKLineMarker;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.uimanager.ThemedReactContext;
import com.github.mikephil.charting.charts.Chart;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.data.CandleDataSet;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.interfaces.datasets.ICandleDataSet;
import com.github.mikephil.charting.utils.ViewPortHandler;
import com.github.wuxudong.rncharts.R;
import com.github.wuxudong.rncharts.data.CombinedDataExtract;
import com.github.wuxudong.rncharts.data.DataExtract;
import com.github.wuxudong.rncharts.listener.RNOnChartGestureListener;
import com.github.wuxudong.rncharts.listener.RNOnChartValueSelectedListener;

/**
 * Created by Bo.Yang on 2018/4/8.
 */
public class EulerCombinedChartManager extends BarLineChartBaseManager<EulerCombinedChart, Entry> {

    private String TAG = "EulerCombinedChartManager";


    private EulerCombinedChart eulerCombinedChart;

    @Override
    public String getName() {
        return "RNEulerCombinedChart";
    }
    @Override
    protected EulerCombinedChart createViewInstance(ThemedReactContext reactContext) {
        eulerCombinedChart=new EulerCombinedChart(reactContext);
        eulerCombinedChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);//x轴位置
        EulerKLineMarker eulerKLineMarker=new EulerKLineMarker(reactContext,R.layout.euler_kline_marker);
        eulerKLineMarker.setChartView(eulerCombinedChart);
        eulerCombinedChart.setMarker(eulerKLineMarker);//设置自定义高亮显示器
        eulerCombinedChart.getXAxis().setAvoidFirstLastClipping(true);//避免第一个值和最后一个被裁剪
        eulerCombinedChart.getXAxis().setLabelCount(4);//设置x轴显示条数
        eulerCombinedChart.getAxisLeft().setLabelCount(4);
        eulerCombinedChart.setScaleYEnabled(false);//禁用y轴的缩放
        eulerCombinedChart.setAutoScaleMinMaxEnabled(true);//自动更新y轴
        eulerCombinedChart.setDoubleTapToZoomEnabled(false);//禁用双击缩放

//        viewPortHandler.setMinimumScaleX(2);//设置x轴最小尺度因子(决定x轴一屏幕显示最多个数，公式待定)
//        eulerCombinedChart.getAxisLeft().setEnabled(false);//左边y轴不要
        eulerCombinedChart.setHighlightPerDragEnabled(true);//缩放到最小滑动显示高亮
//        eulerCombinedChart.getAxisRight().setYOffset(15f);
//        eulerCombinedChart.getAxisRight().setXOffset(15f);
//        eulerCombinedChart.getAxisLeft().setYOffset(15f);
//        eulerCombinedChart.getAxisLeft().setXOffset(15f);//标签离轴的偏移量
//        ViewPortHandler viewPortHandler=eulerCombinedChart.getViewPortHandler();
//        viewPortHandler.getMatrixTouch().postScale(4,1f);//设置x轴5倍 y轴不动
//        viewPortHandler.setMaximumScaleY(20);//目测无效
//        eulerCombinedChart.moveViewToX(30);
//        eulerCombinedChart.setVisibleXRangeMaximum(30);
//        setMaxVisibleValueCount //设置显示标记值
//        eulerCombinedChart.setHighlightPerTapEnabled(false);//点击显示高亮
//        eulerCombinedChart.setBackgroundColor(Color.RED);
//        eulerCombinedChart.setGridBackgroundColor(Color.RED);
//        eulerCombinedChart.notifyDataSetChanged();
//        eulerCombinedChart.invalidate();
//        eulerCombinedChart.setVisibleXRangeMaximum(5f);
        eulerCombinedChart.setOnChartGestureListener(new RNOnChartGestureListener(eulerCombinedChart));
        eulerCombinedChart.setOnChartValueSelectedListener(new RNOnChartValueSelectedListener(eulerCombinedChart));
        return eulerCombinedChart;
    }
    @Override
    protected DataExtract getDataExtract() {
        CombinedDataExtract dataExtract=new CombinedDataExtract();
        return dataExtract;
    }
    @Override
    public void setData(Chart chart, ReadableMap propMap) {
        super.setData(chart, propMap);
       ICandleDataSet candleDataSet=((EulerCombinedChart)chart).getCandleData().getDataSetByIndex(0);
        if(candleDataSet.getEntryCount()>1){
          float max=  ((EulerCombinedChart) chart).getAxisLeft().getAxisMaximum();
          float min=  ((EulerCombinedChart) chart).getAxisLeft().getAxisMinimum();
          int addx=25;
          int xSzie=candleDataSet.getEntryCount()+addx;
            ((CandleDataSet)candleDataSet).setShadowWidth(1);
            eulerCombinedChart.getXAxis().setAxisMaximum(xSzie);
            eulerCombinedChart.moveViewToX(xSzie-60);
            ViewPortHandler viewPortHandler=eulerCombinedChart.getViewPortHandler();
            viewPortHandler.getMatrixTouch().postScale(xSzie/addx,1f);//设置x轴5倍 y轴不动
            eulerCombinedChart.getXAxis().setValueFormatter(new XFormatter(((CandleDataSet)candleDataSet)));
        }
    }

}