package Strategies;

import java.text.SimpleDateFormat;
import com.dukascopy.api.*;

public class IncorrectCommissionInHTMLReport implements IStrategy {

	SimpleDateFormat DateFormatter = new SimpleDateFormat(
			"dd/MMM/yyyy HH:mm:ss");

	IContext context;
	int callcount;
	IOrder Order;

	public void onStart(IContext context) throws JFException {
		this.context = context;
	}

	public void onTick(Instrument instrument, ITick tick) throws JFException {

		if (callcount == 1)
			Order = context.getEngine().submitOrder("AnOrder", instrument,
					IEngine.OrderCommand.BUY, 1);

		if (callcount == 3)
			Order.close();

		System.out.println(CSVLine("TICK:",
				DateFormatter.format(tick.getTime()), tick.getAsk(),
				tick.getBid()));

		if (Order != null) {
			System.out.println(CSVLine("ORDER:", Order.getProfitLossInUSD(),
					Order.getCommission(), Order.getCommissionInUSD()));
		}

		callcount = callcount + 1;

	}

	public void onMessage(IMessage message) throws JFException {
		System.out.println("MESSAGE:" + message);
		IOrder Order = message.getOrder();
		if (Order != null) {
			System.out.println("MESSAGE.ORDER:" + OrderAsText(Order));
		}
	}

	public void onAccount(IAccount account) throws JFException {
	}

	public void onStop() throws JFException {
	}

	public void onBar(Instrument instrument, Period period, IBar askBar,
			IBar bidBar) throws JFException {
	}

	public String OrderAsText(IOrder Order) {

		String CreationTime = DateFormatter.format(Order.getCreationTime());
		String FillTime = DateFormatter.format(Order.getFillTime());

		return CSVLine(
				Order.getId(),
				Order.getLabel(),
				CreationTime,
				FillTime,
				Order.getOrderCommand() == null ? "null" : Order
						.getOrderCommand(), Order.getState(),
				Order.getRequestedAmount(), Order.getAmount(),
				Order.getOpenPrice(), Order.getClosePrice(),
				Order.getCommission(), Order.getProfitLossInAccountCurrency(),
				Order.getProfitLossInUSD(), Order.getCommissionInUSD());
	}
	
	public static String CSVLine(Object... items) {
		String s = "";

		for (int i = 0; i < items.length - 1; i++)
			s = s + items[i].toString() + ", ";
		return s + items[items.length - 1].toString();
	}

	
}
