package com.dukascopy;

import java.text.SimpleDateFormat;
import java.util.*;

import com.dukascopy.api.*;
import com.dukascopy.api.feed.FeedDescriptor;
import com.dukascopy.api.feed.IFeedDescriptor;
import com.dukascopy.api.feed.IFeedListener;
import com.dukascopy.api.feed.util.TimePeriodAggregationFeedDescriptor;

public class Strategy implements IStrategy {
    private IEngine engine;
    private IConsole console;
    private IHistory history;
    private IContext context;
    private IIndicators indicators;
    private IUserInterface userInterface;
    
    public void onStart(IContext context) throws JFException {
        this.engine = context.getEngine();
        this.console = context.getConsole();
        this.history = context.getHistory();
        this.context = context;
        this.indicators = context.getIndicators();
        this.userInterface = context.getUserInterface();

        JFTimeZone jfTimeZone = JFTimeZone.MSK;
        Period period = Period.createCustomPeriod(Unit.Day, 1, jfTimeZone);
        IFeedDescriptor feedDescriptor = new TimePeriodAggregationFeedDescriptor(
                Instrument.EURUSD, period, OfferSide.ASK, Filter.NO_FILTER);

        context.subscribeToFeed(feedDescriptor, new IFeedListener() {
            @Override
            public void onFeedData(IFeedDescriptor feedDescriptor, ITimedData feedData) {
                console.getOut().println("candle start in UTC "+ toStr(feedData.getTime()));
            }

            public String toStr(long time) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") {
                    {
                        setTimeZone(TimeZone.getTimeZone(JFTimeZone.UTC.getName()));
                    }
                };
                return sdf.format(time);
            }

        });
    }

    public void onAccount(IAccount account) throws JFException {
    }

    public void onMessage(IMessage message) throws JFException {
    }

    public void onStop() throws JFException {
    }

    public void onTick(Instrument instrument, ITick tick) throws JFException {
    }
    
    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
    }
}