# Elmer Fudd's Wacky Wabbit Widget Works on-line ordering system.

from Queue import *

class Order:
    def __init__(self, orderNumber, customerName, color="red", quantity=1):
        self.orderNumber = orderNumber
        self.customerName = customerName.strip()
        self.color = color.strip()
        self.quantity = quantity

    def __str__(self):
        return "    Order " + str(self.orderNumber) + ": customer " + self.customerName + \
               " requests " + str(self.quantity) + " " + self.color + " widgets."

    def setOrderNumber(self, newOrderNumber):
        self.orderNumber = newOrderNumber

    def getOrderNumber(self):
        return self.orderNumber

    def setColor(self,newColor):
        self.color = newColor

    def getColor(self):
        return self.color

    def setQuantity(self, newQuantity):
        self.quantity = newQuantity

    def getQuantity(self):
        return self.quantity

    def printProducts(self):
        print ("We offer widgets in the following colors: ")
        print ("   red, white, blue")


def TestFactory():

    orders = MyQueue()
    orderCounter = 1

    while True:
        print ("\nWelcome to the Waskelly Wabbit Widget Works automated ordering system!\n")
        name = input("   Please input customer name (or exit): ")

        if name.lower() == "exit":
            break
        color = input("   Please select desired widget color (red, white, blue): ")
        color = color.strip()
        if not color in ["red", "white", "blue"]:
            print ("Sorry, that's not a color we offer. Order cancelled.")
            continue
        quantity = input("   Excellent choice. How many " + color + " widgets do you want? ")
        if (not quantity.isdigit()) or int(quantity) < 1:
            print (" Bad quantity. Order cancelled.")
            continue
        order = Order(orderCounter, name, color, quantity)
        orders.enqueue( order )
        orderCounter += 1
        print ("Order confirmed!  Please shop with us again.")
        # print orders

    # We've collected the orders, now we have to process them. 
    print ("\nNow processing orders:")
    while not orders.isEmpty():
        nextOrder = orders.dequeue()
        print ("  Order shipped: ", end=" ")
        print (nextOrder)
    print ("Queue empty")

TestFactory()

