﻿using System;

namespace GumballState
{
	public class SoldState : IState
	{
		private readonly GumballMachine _gumballMachine;

		public SoldState(GumballMachine gumballMachine)
		{
			_gumballMachine = gumballMachine;
		}

		// Некорректные действия для этого состояния

		public void InsertQuarter()
		{
			Console.WriteLine("Please wait, we're already giving you a gumball");
		}

		public void EjectQuarter()
		{
			Console.WriteLine("Sorry, you already turned crank");
		}

		public void TurnCrank()
		{
			Console.WriteLine("Turning twice doesn't get you another gumball!");
		}

		// Здесь начинается настоящая работа
		public void Dispense()
		{
			// Находимся в состоянии SoldState, т.е. покупка оплачена. Сначала приказываем автомату выдать шарик
			_gumballMachine.ReleaseBall();

			// Затем проверяем количество шариков, и в зависимости от результата переходим в состояние NoQuarterState или
			// SoldOutState
			if (_gumballMachine.Count > 0)
			{
				_gumballMachine.State = _gumballMachine.NoQuarterState;
			}
			else
			{
				Console.WriteLine("Oops, out of gumballs!");
				_gumballMachine.State = _gumballMachine.SoldOutState;
			}
		}
	}
}
