import com.dukascopy.api.IAccount;
import com.dukascopy.api.IBar;
import com.dukascopy.api.IContext;
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.OfferSide;
import com.dukascopy.api.Period;
import com.dukascopy.api.IIndicators.AppliedPrice;
import com.dukascopy.api.indicators.IIndicator;
import com.dukascopy.api.indicators.IIndicatorContext;
import com.dukascopy.api.indicators.IndicatorInfo;
import com.dukascopy.api.indicators.IndicatorResult;
import com.dukascopy.api.indicators.InputParameterInfo;
import com.dukascopy.api.indicators.OptInputParameterInfo;
import com.dukascopy.api.indicators.OutputParameterInfo;

public class CustomIndicatorStrategy implements IStrategy {

	IContext context;

	@Override
	public void onStart(IContext context) throws JFException {
		this.context = context;
		context.getIndicators().registerCustomIndicator(CustomIndicator.class);
	}

	@Override
	public void onStop() throws JFException {
		
	}

	@Override
	public void onAccount(IAccount account) throws JFException {

	}

	@Override
	public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {

	}

	@Override
	public void onMessage(IMessage message) throws JFException {

	}


	@Override
	public void onTick(Instrument instrument, ITick tick) throws JFException {
		context.getConsole().getOut().println("Custom idnicator : " +
			//context.getIndicators().getIndicator("CustomIndicator").calculate(0, 0)
			context.getIndicators().calculateIndicator(
				instrument,
				Period.DAILY,
				new OfferSide[] { OfferSide.ASK},
				"CustomIndicator",
				new AppliedPrice[] {AppliedPrice.CLOSE},
	            null,
	            0
			)
		);
	}
	
	public static class CustomIndicator implements IIndicator {

    @Override
    public IndicatorResult calculate(int startIndex, int endIndex) {
        IndicatorResult result = new IndicatorResult();
        result.setFirstValueIndex(0);
        result.setLastValueIndex(1);
        return result;
    }

    @Override
    public IndicatorInfo getIndicatorInfo() {
        IndicatorInfo info = new IndicatorInfo(
            "CustomIndicator",
            "Custom indicator title",
            "Custom",
            false,
            false,
            false,
            0,
            0,
            0
        );
        return info;
    }

    @Override
    public InputParameterInfo getInputParameterInfo(int index) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public int getLookback() {
        return 0;
    }

    @Override
    public int getLookforward() {
        return 0;
    }

    @Override
    public OptInputParameterInfo getOptInputParameterInfo(int index) {
        return null;
    }

    @Override
    public OutputParameterInfo getOutputParameterInfo(int index) {
        return null;
    }

    @Override
    public void onStart(IIndicatorContext context) {
        context.getConsole().getOut().println("CUSTOM INDICATOR START");
    }

    @Override
    public void setInputParameter(int index, Object array) {

    }

    @Override
    public void setOptInputParameter(int index, Object value) {

    }

    @Override
    public void setOutputParameter(int index, Object array) {

    }
}
}