import java.util.ArrayList;
import java.util.Scanner;

public class TechStore {
	public static void p(String input) {
		System.out.print(input);
	}
	public static void main(String[] args) {
		StorageManager manager = new StorageManager();
		OrderSystem system = new OrderSystem(manager);
		Scanner scnr = new Scanner(System.in);
		while (true) {
			p("\nInput mode: ");
			String input = scnr.nextLine();
			if (input.equals("8")) {
				break;
			}
			switch (Integer.parseInt(input)) {
			case 1: {
				p("Name: ");
				String name = scnr.nextLine();
				p("E-Mail: ");
				String email = scnr.nextLine();
				system.addClient(new Client(name, email));
				break;
			}
			case 2: {
				ArrayList<Client> clients = system.getClients();
				if (clients.isEmpty()) {
					System.out.println("No clients found");
					break;
				}
				for (Client client : clients) {
					System.out.println(client.toString());
				}
				break;
			}
			case 3: {
				p("ID: ");
				int id = Integer.parseInt(scnr.nextLine());
				p("Name: ");
				String name = scnr.nextLine();
				p("Price: ");
				int price = Integer.parseInt(scnr.nextLine());
				p("Amount: ");
				int amt = Integer.parseInt(scnr.nextLine());
				system.addProduct(new Product(id, name, price, amt));
				break;
			}
			case 4: {
				system.showProducts();
				break;
			}
			case 5: {
				system.showProducts();
				p("ID: ");
				int id = Integer.parseInt(scnr.nextLine());
				p("Amount: ");
				int amt = Integer.parseInt(scnr.nextLine());
				manager.increaseStorage(id, amt);
				break;
			}
			case 6: {
				system.showClients();
				p("ID: ");
				int clientID = Integer.parseInt(scnr.nextLine());
				p("Date: ");
				String date = scnr.nextLine();
				Order order = new Order(clientID, date);
				system.showProducts();
				while (true) {
					p("ID: ");
					String id_str = scnr.nextLine();
					if (id_str.equals("exit")) {
						break;
					}
					int id = Integer.parseInt(id_str);
					p("Amount: ");
					int amt = Integer.parseInt(scnr.nextLine());
					if (manager.getProductByID(id).getAmount() < amt) {
						System.out.println("Amount chosen too high");
						continue;
					}
					order.addEntry(new OrderEntry(system.getProductByID(id), amt));
				}
				system.createOrder(clientID, order);
				break;
			}
			case 7: {
				system.showClients();
				p("ID: ");
				int id = Integer.parseInt(scnr.nextLine());
				int n = 0;
				for (Order order : system.getClientByID(id).getOrders()) {
					System.out.println((n++) + order.toString());
				}
				p("ID: ");
				int order_id = Integer.parseInt(scnr.nextLine());
				System.out.println(system.getClientByID(id).getOrders().get(order_id).createReceipt());
				break;
			}
			case 8: {
				return;
			}
			}
		}
	}
}