package cz.vutbr.feec.sim.ha;

import java.util.Vector;

import cz.vutbr.feec.simlib.Proc;
import cz.vutbr.feec.simlib.net.InetAddress;

public class ListOfActions extends Proc{

	private int time;
	
	boolean partFTDinit = false;
	boolean partFTIinit = false;
	
	
	private Vector<FTHost> vectorOfFTHost;
	
	public ListOfActions (int time, Vector<FTHost> vectorOfFTHost){
	
		this.time = time;
		this.vectorOfFTHost = vectorOfFTHost;
	}
	@Override
	public void action() {
		sleepProc(1000);
		partFTDinit = true; // stav aktualizace stromu
		partFTIinit = true;
		while(!getSimulation().isFinished()) {
			sleepProc(1000);
			if(partFTDinit){
				vectorOfFTHost.get(0).getSessionState().setStatusOfFT(1); //aktovace FTM
				
				for (int index=1; index<12; index++) {
					
					vectorOfFTHost.get(index).getSessionState().setSendIPAddr(vectorOfFTHost
							.get(0).getSessionState().getUnicastAddr()); //definování IP adresy FTM u vsech FT 
					
				}
				vectorOfFTHost.get(0).getSessionState().setFTDpacket(1, 1, 1, 12, 6001, 1, 1, 0, 1500, 0); // vytvoření FTD paketu s definovanými vlastnostmi
				
			for(int i = 2; i<12; i++){	
				vectorOfFTHost.get(0).getSessionState().setSendIPAddr(vectorOfFTHost.get(i) //pripravení rámmce k odeslání ke vsem FT
						.getSessionState().getUnicastAddr());
				vectorOfFTHost.get(0).getSessionState().statOfSendFTD(true); // definice pripravenosti (stav konrotoluje odesílací vlákno)
				
				while(vectorOfFTHost.get(0).getSessionState().readyToSendFTD() == true ){ pošká na odeslání
					sleepProc(1000);
				}
			
			}
			vectorOfFTHost.get(0).getSessionState().setFTDpacket(1, 1, 1, 12, 6001, 0, 0, 0, 1500, 0); //definice FTD pro RFT
			vectorOfFTHost.get(0).getSessionState().setSendIPAddr(vectorOfFTHost.get(1)
					.getSessionState().getUnicastAddr());												//nastavení adrey
			vectorOfFTHost.get(0).getSessionState().statOfSendFTD(true);
			
			while(vectorOfFTHost.get(0).getSessionState().readyToSendFTD() == true ){					// definice pripravenosti (stav konrotoluje odesílací vlákno)
				sleepProc(1000);
			}
				partFTDinit=false;																		//zkončena faze odeslání FTD
			if(partFTIinit){																			//faze potvrzení stavu
				vectorOfFTHost.get(0).getSessionState().setFTIpacket(1, 2, 1, 8, 6001, 1, 0);			//generování FTI paketu o potvrzení
				for(int i = 1; i<12; i++){	
					InetAddress addrFTM = vectorOfFTHost.get(0).getSessionState().getUnicastAddr();
					vectorOfFTHost.get(i).getSessionState().setSendIPAddr(addrFTM);
					vectorOfFTHost.get(i).getSessionState().statOfSendFTI(true);						// definice pripravenosti (stav konrotoluje odesílací vlákno)
				}
				
			}
			
			}
		}
//			sleepProc(7000);
//			vectorOfFTHost.get(0).getSessionState().statOfSendFTD(true); // nastavime FT4 aby po 5s zacal posilat FTI

//			vectorOfFTHost.get(3).getSessionState().statOfSendFTI(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			vectorOfFTHost.get(4).getSessionState().statOfSendFTI(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			vectorOfFTHost.get(4).getSessionState().statOfSendFTD(true); // nastavime FT4 aby po 5s zacal posilat FTI

//			sleepProc(13000);

//			vectorOfFTHost.get(9).getSessionState().statOfSendFTI(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			vectorOfFTHost.get(9).getSessionState().statOfSendFTD(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			vectorOfFTHost.get(1).getSessionState().statOfSendFTI(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			vectorOfFTHost.get(1).getSessionState().statOfSendFTD(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			vectorOfFTHost.get(2).getSessionState().statOfSendFTI(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			vectorOfFTHost.get(2).getSessionState().statOfSendFTD(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			vectorOfFTHost.get(3).getSessionState().statOfSendFTI(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			vectorOfFTHost.get(3).getSessionState().statOfSendFTD(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			vectorOfFTHost.get(8).getSessionState().statOfSendFTI(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			vectorOfFTHost.get(8).getSessionState().statOfSendFTD(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			sleepProc(7000);
//			vectorOfFTHost.get(3).getSessionState().statOfSendFTI(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			vectorOfFTHost.get(3).getSessionState().statOfSendFTD(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			vectorOfFTHost.get(4).getSessionState().statOfSendFTI(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			vectorOfFTHost.get(4).getSessionState().statOfSendFTD(true); // nastavime FT4 aby po 5s zacal posilat FTI
//
//			
//			//vectorOfFTHost.get(3).getSessionState().statOfSendFTI(false); // nastavime FT4 aby po 5s zacal posilat FTI
//			sleepProc(100000);
			
		}
		
	
	public void setFTgroup(Vector<FTHost> ft) {
		this.vectorOfFTHost = ft;
	}

}
