package jforex;

import com.dukascopy.api.drawings.IPolyLineChartObject;
import com.dukascopy.api.IAccount;
import com.dukascopy.api.IBar;
import com.dukascopy.api.IChart;
import com.dukascopy.api.IConsole;
import com.dukascopy.api.IContext;
import com.dukascopy.api.IHistory;
import com.dukascopy.api.IMessage;
import com.dukascopy.api.IStrategy;
import com.dukascopy.api.ITick;
import com.dukascopy.api.Instrument;
import com.dukascopy.api.JFException;
import com.dukascopy.api.Period;
import com.dukascopy.api.drawings.IVerticalLineChartObject;
import java.awt.Color;
import java.util.List;

public class Chart1 implements IStrategy {

    private IContext context = null;
    private IHistory history = null;
    private IChart chart = null;
    private Instrument instrument = null;
    //private List<ITick> list = null;
    //private List<SingleTick> futureList = new ArrayList<SingleTick>();
    private Color askColor = null;
    private Color bidColor = null;
    private volatile boolean isRun = true;
    //private List<IPolyLineChartObject> polyLines = new ArrayList<IPolyLineChartObject>();
    //private IShortLineChartObject lineAsk = null;
    //private IShortLineChartObject lineBid = null;
    //private IPolyLineChartObject lineAsk1 = chart.getChartObjectFactory().createPolyLine();
    private IConsole console = null;

    @Override
    public void onAccount(IAccount arg0) {
    }

    @Override
    public void onBar(Instrument instrument, Period period, IBar bar1, IBar bar2) {
    }

    @Override
    public void onMessage(IMessage message) {
    }

    @Override
    public void onStart(IContext context) throws JFException {
        System.gc();
        this.context = context;
        console = context.getConsole();
        instrument = instrument.EURUSD;
        history = context.getHistory();
        chart = context.getChart(instrument);
        chart.removeAll();
        this.askColor = new Color(0xA6FFA6);
        this.bidColor = new Color(0xFFCCCC);
    }

    @Override
    public void onStop() {
        System.gc();
    }

    @Override
    public void onTick(Instrument instrument, ITick tick) throws JFException {
        if (instrument == this.instrument && isRun) {
            //isRun = false;
            chart.removeAll();
            List<ITick> list = history.getTicks(instrument, tick.getTime() - 250000, tick.getTime());
            IVerticalLineChartObject vLine = chart.getChartObjectFactory().createVerticalLine();
            vLine.move(tick.getTime(), 0);
            vLine.setColor(Color.RED);
            chart.addToMainChart(vLine);
            IPolyLineChartObject lineAsk = chart.getChartObjectFactory().createPolyLine();
            IPolyLineChartObject lineBid = chart.getChartObjectFactory().createPolyLine();
            lineAsk.addNewPoint(tick.getTime(), tick.getAsk());
            lineBid.addNewPoint(tick.getTime(), tick.getBid());
            for (ITick tempTick : list) {
                lineAsk.addNewPoint(tempTick.getTime() + 250000, tempTick.getAsk());
                lineBid.addNewPoint(tempTick.getTime() + 250000, tempTick.getBid());
            }
            lineAsk.setColor(askColor);
            chart.addToMainChart(lineAsk);
            lineBid.setColor(bidColor);
            chart.addToMainChart(lineBid);
            for (int i = 0; i < lineAsk.getPointsCount(); i++) {
                console.getOut().print("lineAsk.getTime(i) = " + lineAsk.getTime(i) + ", lineAsk.getPrice(i) = " + lineAsk.getPrice(i) + "\n");
            }
            console.getOut().print("lineAsk = " + lineAsk.toString() + "\n");
            console.getOut().print("lineAsk.getPointsCount() = " + lineAsk.getPointsCount() + "\n");
            console.getOut().print("list.size()= " + list.size() + "\n");
            isRun = true;
        }
    }
}
