package fucoin.actions.transaction;


import akka.actor.ActorRef;
import akka.actor.UntypedActorContext;
import fucoin.Wallet;
import fucoin.actions.search.ActionSearchWalletReference;

public class ActionInvokeSentMoney extends Transaction{
	public final String name;
	public final int amount;
    public ActionInvokeSentMoney(String name, int amount) {
    	this.name=name;
        this.amount = amount;
    }
	@Override
	protected void onAction(ActorRef sender, ActorRef self,
			UntypedActorContext context, Wallet wallet) {
		log(wallet.getKnownNeighbors()+"");
		if(wallet.getKnownNeighbors().containsKey(name)){
			wallet.getRemoteSuperVisorActor().tell(
					new ActionInvokeDistributedCommitedTransfer(self,wallet.getKnownNeighbors().get(name),amount), sender);
		}else{
			ActionSearchWalletReference aswr = new ActionSearchWalletReference(name);
			for(ActorRef neighbor : wallet.getKnownNeighbors().values()){
				neighbor.tell(aswr, self);
			}
			sleep(self, context, 200);
			self.tell(this, self);
		}
	}
	private void sleep(ActorRef self, UntypedActorContext context, int sleeptime) {
		try {
			context.unwatch(self);
			Thread.sleep(sleeptime);
			context.watch(self);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}