package web._05._0303;

import java.util.ArrayList;
import java.util.List;

/**
 * 5-3-3：
 * S533Employeeクラスは、社会人を表します。
 * S533Employeeクラスは、購入する商品を選択するメソッドや、
 * 購入する商品の金額計算、帰宅するメソッドなどがあります。
 *
 * @author akira_ishii
 *
 */
public class S533Employee {

	/**
	 * メニューを表示します。
	 * メニューでは、「購入商品の金額計算」と「帰宅」を選ぶことができます。
	 *
	 */
	public void showMenu() {

		System.out.println("使用する機能を選択してください。");
		System.out.println("※先頭の数字を入力してください。");
		System.out.println("1.購入商品の金額計算");
		System.out.println("2.帰宅");

		String choice = new java.util.Scanner(System.in).nextLine();

		if (choice.equals("1")) {
			calculationGoods(selectGoods());
		} else if (choice.equals("2")) {
			goHome();
		} else {
			System.out.println("1-2のどれかをお選びください。");
		}
	}

	/**
	 * カゴの中の商品の総額とポイント数を計算し、表示します。
	 * ポイント数は総額の5%で計算します。
	 * カゴの中が空の場合は計算しません。
	 *
	 * @param priceList 購入する商品の金額を格納したリスト
	 */
	public void calculationGoods(List<Integer> priceList) {
		if (priceList.isEmpty()) {
			System.out.println("カゴが空です。");
		} else {
			int total = 0;

			for (Integer price : priceList) {
				total = total + price.intValue();
			}
			// Java8↑ int total=0 - for文を以下で表現できる
			// total = goodsList.stream().reduce(0, (t, v) -> t + v);

			System.out.println("購入する商品の総額は、" + total + "円です。");
			System.out.println("ポイントは、" + (int) (total * 0.05) + "ポイントです。");
		}
	}

	/**
	 * 購入する商品を選択します。
	 * 商品は、野菜・肉・魚・飲み物からそれぞれ選択します。
	 *
	 * @return priceList 購入する商品の金額を格納したリスト
	 */
	public List<Integer> selectGoods() {
		List<Integer> priceList = new ArrayList<>();

		selectVegetables(priceList);
		selectMeat(priceList);
		selectFish(priceList);
		selectDrink(priceList);

		return priceList;
	}

	/**
	 * 購入する野菜を選択し、金額を追加します。
	 * 800円・700円・500円の野菜を追加します。
	 *
	 * @param priceList 購入する商品の金額を格納するリスト
	 */
	public void selectVegetables(List<Integer> priceList) {
		priceList.add(800);
		priceList.add(700);
		priceList.add(500);
	}

	/**
	 * 購入するお肉を選択し、金額を追加します。
	 * 1500円の肉を3種類追加します。
	 *
	 * @param priceList 購入する商品の金額を格納するリスト
	 */
	public void selectMeat(List<Integer> priceList) {
		priceList.add(1500);
		priceList.add(1500);
		priceList.add(1500);
	}

	/**
	 * 購入する魚を選択し、金額を追加します。
	 * 650円・400円・500円の魚を追加します。
	 *
	 * @param priceList 購入する商品の金額を格納するリスト
	 */
	public void selectFish(List<Integer> priceList) {
		priceList.add(650);
		priceList.add(400);
		priceList.add(500);
	}

	/**
	 * 購入する飲み物を選択し、金額を追加します。
	 * 211円・168円・120円の飲み物を追加します。
	 *
	 * @param priceList 購入する商品の金額を格納するリスト
	 */
	public void selectDrink(List<Integer> priceList) {
		priceList.add(211);
		priceList.add(168);
		priceList.add(120);
	}

	/**
	 * 帰宅します。
	 *
	 */
	public void goHome() {

	}

}
