package ru.erfolk.jforex.utils;

import com.dukascopy.api.*;

import java.util.LinkedList;
import java.util.List;

/**
 * Контейнер стратегий.
 * Позволяет одновременно работать нескольким стратегиям.
 */
public class StrategyContainer implements IStrategy {
    private List<IStrategy> strategies;

    public StrategyContainer() {
        strategies = new LinkedList<IStrategy>();
    }

    public void addStrategy(IStrategy strategy) {
        strategies.add(strategy);
    }

    public boolean removeStrategy(IStrategy strategy) {
        return strategies.remove(strategy);
    }

    @Override
    public void onStart(IContext context) throws JFException {
        for (IStrategy strategy : strategies) {
            strategy.onStart(context);
        }
    }

    @Override
    public void onTick(Instrument instrument, ITick tick) throws JFException {
        for (IStrategy strategy : strategies) {
            strategy.onTick(instrument, tick);
        }
    }

    @Override
    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
        for (IStrategy strategy : strategies) {
            strategy.onBar(instrument, period, askBar, bidBar);
        }
    }

    @Override
    public void onMessage(IMessage message) throws JFException {
        for (IStrategy strategy : strategies) {
            strategy.onMessage(message);
        }
    }

    @Override
    public void onAccount(IAccount account) throws JFException {
        for (IStrategy strategy : strategies) {
            strategy.onAccount(account);
        }
    }

    @Override
    public void onStop() throws JFException {
        for (IStrategy strategy : strategies) {
            strategy.onStop();
        }
    }
}
