package com.pnehls;

public class MementoPatternDemo {

	public static void main(String[] args) throws Exception {
		
		ShoppingCart cart = new ShoppingCart();
		Caretaker caretaker = new Caretaker();
		
		//save initial empty state
		caretaker.addMemento(cart.saveStateToMemento());
		Thread.sleep(2000);

		cart.printContents();
		Thread.sleep(2000);
		
		cart.addItem("Ground Beef");
		Thread.sleep(2000);

		caretaker.addMemento(cart.saveStateToMemento());
		Thread.sleep(2000);
		
		cart.addItem("Tomato");	
		Thread.sleep(2000);

		caretaker.addMemento(cart.saveStateToMemento());
		Thread.sleep(2000);
		
		cart.printContents();
		Thread.sleep(2000);
		
		cart.addItem("Hamburger Buns");
		Thread.sleep(2000);

		caretaker.addMemento(cart.saveStateToMemento());
		Thread.sleep(2000);

		cart.printContents();
		Thread.sleep(2000);
		
		//note that hot dog is not saved after added
		cart.addItem("Hot Dog");
		Thread.sleep(2000);

		cart.printContents();
		Thread.sleep(2000);
		
		System.out.println("---Reloading initial state---\n");
		
		Thread.sleep(2000);

		//load initial state
		cart.getStateFromMemento(caretaker.getMementoByIndex(0));
		
		Thread.sleep(2000);
		
		cart.printContents();
		
		Thread.sleep(2000);
		
		System.out.println("---Reloading last saved state---\n");
		//load reload last saved state
		
		Thread.sleep(2000);
		
		cart.getStateFromMemento(caretaker.getLastSave());
		
		Thread.sleep(2000);
		
		cart.printContents();
		
		Thread.sleep(2000);
		
		System.out.println("---Reloading second save (one item in cart)---\n");
		
		Thread.sleep(2000);
		
		cart.getStateFromMemento(caretaker.getMementoByIndex(1));
		
		Thread.sleep(2000);

		cart.printContents();


	}

}
