package jp.ossc.petstore.common;

import java.util.ArrayList;
import java.util.List;

import jp.ossc.petstore.model.Product;

/**
 * カートクラス
 * @author ossc
 * @version $Revision: 1.2 $
 */
public class Cart {

	/**
	 * カート内容
	 */
	private List<CartItem> itemList = new ArrayList<CartItem>();

	/**
	 * カート内容リスト取得
	 * @return カート内容リスト
	 */
	public List<CartItem> getItemList() {
		return itemList;
	}


	/**
	 * 商品追加<br>
	 * 指定された商品がカートに存在する場合は、指定された注文数を加算する。
	 * @param product 商品情報
	 * @param quantity 注文数
	 */
	public void addItem(Product product, int quantity) {

		CartItem item = getItem(product.getId());

		if (item == null) {
			item = new CartItem(product, quantity);
			itemList.add(item);

		} else {
			item.setQuantity(item.getQuantity() + quantity);
		}

	}


	/**
	 * 注文数変更<br>
	 * @param id 商品ＩＤ
	 * @param quantity 注文数
	 * @return true:指定された商品がカート内に存在した場合<br>
	 *          false:指定された商品がカート内に存在しない場合
	 */
	public boolean updateQuantity(int id, int quantity) {

		boolean updated = false;
		
		CartItem item = getItem(id);

		if (item != null) {
			item.setQuantity(quantity);
			updated = true;
		}
		
		return updated;
	}


	/**
	 * 商品削除<br>
	 * @param id 商品ＩＤ
	 * @return true:指定された商品がカート内に存在した場合<br>
	 *          false:指定された商品がカート内に存在しない場合
	 */
	public boolean deleteItem(int id) {

		boolean deleted = false;
		List<CartItem> newItemList = new ArrayList<CartItem>();
		
		for (CartItem item : itemList) {
			if (item.getId() != id) {
				newItemList.add(item);
			} else {
				deleted = true;
			}
		}
		
		itemList.clear();
		itemList.addAll(newItemList);
		
		return deleted;
	}


	/**
	 * 合計金額取得<br>
	 * @return 合計金額
	 */
	public int getTotalPrice() {

		int totalPrice = 0;
		
		for (CartItem item : itemList) {
			totalPrice += item.getTotalPrice();
		}

		return totalPrice;
	}


	/**
	 * 合計商品数取得<br>
	 * @return 合計商品数
	 */
	public int getItemSize() {
		return itemList.size();
	}

	/**
	 * カート内商品0件判定<br>
	 * @return true:0件の場合、false:0件以外の場合
	 */
	public boolean isEmpty() {
		return itemList.isEmpty();
	}

	/**
	 * カート内容クリア<br>
	 */
	public void clear() {
		itemList.clear();
	}

	/**
	 * 商品取得<br>
	 * @param id 商品ＩＤ
	 * @return カート内容オブジェクト
	 */
	private CartItem getItem(int id) {

		for (CartItem item : itemList) {
			if (item.getId() == id) {
				return item;
			}
		}

		return null;
	}
}
