package com.yummynoodlebar.web.domain;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Component;
import com.yummynoodlebar.events.orders.OrderDetails;
@Component
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class Basket implements Serializable {
private static final long serialVersionUID = -1779666204730031281L;
private Map<String, MenuItem> items = new HashMap<String, MenuItem>();
public Basket() {
}
public Basket(Map<String, MenuItem> items) {
this.items = items;
}
public MenuItem add(MenuItem item) {
items.put(item.getId(), item);
return item;
}
public void delete(String key) {
items.remove(key);
}
public MenuItem findById(String key) {
for (MenuItem item : items.values()) {
if (item.getId().equals(key)) {
return item;
}
}
return null;
}
public List<MenuItem> findAll() {
return new ArrayList<MenuItem>(items.values());
}
public List<MenuItem> getItems() {
return findAll();
}
public int getSize() {
return items.size();
}
public void clear() {
items = new HashMap<String, MenuItem>();
}
public OrderDetails createOrderDetailsWithCustomerInfo(CustomerInfo info) {
OrderDetails order = new OrderDetails();
BeanUtils.copyProperties(info, order);
order.setDateTimeOfSubmission(new Date());
copyItemsFromBasketToOrder(order);
return order;
}
private void copyItemsFromBasketToOrder(OrderDetails orderDetails) {
Map<String, Integer> items = new HashMap<String, Integer>();
for (MenuItem item : getItems()) {
//TODO need to get quantity from user input
items.put(item.getId(), 1);
}
orderDetails.setOrderItems(items);
}
}