Chapter 5 - Section 3

	import Operation.*

	fun main(args: Array<String>) {
		try {
			val number1 = MathLib.getInput("Number 1: ")
			val number2 = MathLib.getInput("Number 2: ")

			print("Select an operation (${MathLib.OPERATIONS}): ")
			val operation = readLine()

			val result: Double? =
					when (operation) {
						ADD.operator -> MathLib.addValues(number1, number2)
						SUBTRACT.operator -> MathLib.subtractValues(number1, number2)
						MULTIPLY.operator -> MathLib.multiplyValues(number1, number2)
						DIVIDE.operator -> MathLib.divideValues(number1, number2)
						else -> throw Exception("Unknown operation")
					}
			println("The answer is $result")
		} catch (e: NumberFormatException) {
			println("${e.message} is not a number")
		} catch (e: Exception) {
			println(e.message)
		}
	}


	enum class Operation(val operator: String) {
		ADD("+"), SUBTRACT("-"), MULTIPLY("*"), DIVIDE("/")
	}


	class MathLib {
		companion object {

			//        const val ADD = "+"
	//        const val SUBTRACT = "-"
	//        const val MULTIPLY = "*"
	//        const val DIVIDE = "/"
			const val OPERATIONS = "+ - * /"

			fun addValues(number1: Double, number2: Double) = number1 + number2
			fun subtractValues(number1: Double, number2: Double) = number1 - number2
			fun multiplyValues(number1: Double, number2: Double) = number1 * number2
			fun divideValues(number1: Double, number2: Double) = number1 / number2

			fun getInput(prompt: String): Double {
				print(prompt)
				val string: String? = readLine()
				val number = string!!.toBigDecimal()
				return number.toDouble()
			}
		}
	}