package com.github.wuxudong.rncharts.charts;


import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.annotations.ReactProp;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.wuxudong.rncharts.data.DataExtract;
import com.github.wuxudong.rncharts.data.LineDataExtract;
import com.github.wuxudong.rncharts.listener.RNOnChartValueSelectedListener;
import com.github.wuxudong.rncharts.listener.RNOnChartGestureListener;

import javax.annotation.Nullable;

public class LineChartManager extends BarLineChartBaseManager<LineChart, Entry> {
    private LineChart lineCharts;
    @Override
    public String getName() {
        return "RNLineChart";
    }

    @Override
    protected LineChart createViewInstance(ThemedReactContext reactContext) {
        LineChart lineChart =  new LineChart(reactContext);

        lineChart.setOnChartValueSelectedListener(new RNOnChartValueSelectedListener(lineChart));
        lineChart.setOnChartGestureListener(new RNOnChartGestureListener(lineChart));
        lineCharts=lineChart;
        return lineChart;
    }

    @Override
    protected DataExtract getDataExtract() {
        return new LineDataExtract();
    }


    //TODO 后续再整合，addData4和addData2重复
    /**
     * 添加一组数据(一个点)
     * @param data 数组，表示几条线
     */
    public void addData4(LineChart chart,String[] data) {
        if(chart!=null){
            LineData lineData=chart.getLineData();
            System.out.println(data);
            for(int i=0;i<data.length;i++){
                Entry entry=new Entry(lineData.getDataSetByIndex(i).getEntryCount()+121,Float.parseFloat(data[i]));
                lineData.addEntry(entry,i);
            }
            chart.notifyDataSetChanged();
            chart.invalidate();
        }
    }

    /**
     * 为两条线的k线添加
     * @param chart
     * @param data
     */
    public void addData2(LineChart chart,String[] data){
        if(chart!=null){
            LineData lineData=chart.getLineData();
            System.out.println(data);
            for(int i=0;i<data.length;i++){
                Entry entry=new Entry(lineData.getDataSetByIndex(i).getEntryCount()+1,Float.parseFloat(data[i]));
                lineData.addEntry(entry,i);
            }
            chart.notifyDataSetChanged();
            chart.invalidate();
        }
    }

    @Override
    public void receiveCommand(LineChart root, int commandId, @Nullable ReadableArray args) {
        String[] data=new String[args.size()];
        for(int i=0;i<args.size();i++){
            data[i]=args.getString(i);
        }
        switch (commandId) {
            case 1:
                addData4(root,data);
                break;
            case 2:
                addData2(root,data);
                break;
        }

    }

}
