// SPDX-License-Identifier: Apache-2.0

package examples

import scala.collection.mutable

/* Useful utilities for testing vending machines */
object VendingMachineUtils {
  abstract class Coin(val name: String, val value: Int)
  // US Coins
  case object Penny extends Coin("penny", 1)
  case object Nickel extends Coin("nickel", 5)
  case object Dime extends Coin("dime", 10)
  case object Quarter extends Coin("quarter", 25)

  // Harry Potter Coins
  case object Knut extends Coin("knut", Penny.value * 2) // Assuming 1 Knut is worth $0.02
  case object Sickle extends Coin("sickle", Knut.value * 29)
  case object Galleon extends Coin("galleon", Sickle.value * 17)

  def getExpectedResults(inputs: Seq[Option[Coin]], sodaCost: Int): Seq[Boolean] = {
    var value = 0
    val outputs = mutable.ArrayBuffer.empty[Boolean]
    for (input <- inputs) {
      val incValue = input match {
        case Some(coin) => coin.value
        case None => 0
      }
      if (value >= sodaCost) {
        outputs.append(true)
        value = 0
      } else {
        outputs.append(false)
        value += incValue
      }
    }
    outputs.toSeq
  }
}
