package jforex;

import java.util.*;
import com.dukascopy.api.*;
import com.dukascopy.api.feed.*;
import com.dukascopy.api.feed.util.*;

public class CustomPeriodTest implements IStrategy, IFeedListener {
    private IEngine engine;
    private IConsole console;
    private IHistory history;
    private IContext context;
    private IIndicators indicators;
    private IUserInterface userInterface;
    
    private Period myPeriod = Period.createCustomPeriod(Unit.Day, 1, JFTimeZone.EET);
    private IFeedDescriptor myFeedDescriptor = new TimePeriodAggregationFeedDescriptor(Instrument.EURUSD, myPeriod, OfferSide.BID, Filter.WEEKENDS);
    
    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();

        context.setSubscribedInstruments(Collections.singleton(myFeedDescriptor.getInstrument()), true);
        context.subscribeToFeed(myFeedDescriptor, this);
    }

    public void onStop() throws JFException {
        context.unsubscribeFromFeed(this);
    }

    public void onAccount(IAccount account) throws JFException {
    }

    public void onMessage(IMessage message) throws JFException {       
    }

    public void onTick(Instrument instrument, ITick tick) throws JFException {
    }
    
    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
    }
     
    public void onFeedData(IFeedDescriptor feedDescriptor, ITimedData feedData) {
        if (!feedDescriptor.equals(myFeedDescriptor)) {
            return;
        }
        
        try {
            console.getOut().println(feedData);
            
            IBar inProgressBar1 = history.getBar(myFeedDescriptor.getInstrument(), myFeedDescriptor.getPeriod(), myFeedDescriptor.getOfferSide(), 0);
            console.getOut().println(inProgressBar1);
            
            ITimedData inProgressBar2 = history.getFeedData(myFeedDescriptor, 0);
            console.getOut().println(inProgressBar2);
        
        } catch (JFException e) {
            console.getErr().println(e);
        }
    }
}
