from database import *
from customer import *

# Möjliga val i programmets huvudmeny:
CHOICE_SHOW_CUSTOMERS = 1
CHOICE_SHOW_BONUS = 2
CHOICE_NEW_VISIT = 3
CHOICE_NEW_CUSTOMER = 4
CHOICE_QUIT_PROGRAM = 5
N_CHOICES = 5

# Visa programmets huvudmeny och begär in (korrekt) val från användaren
def mainMenu ():
    print ("""
Huvudmeny:

1. Visa alla kunder
2. Visa alla kunder som kan få gratis klippning
3. Nytt besök
4. Registrera ny kund
5. Avsluta""")
    while True:
        try:
            s = input ("Välj: ")
            ans = int (s)
            if ans >= 1 and ans <= N_CHOICES:
                print () # Skriv ut tom rad
                return ans
        except:
            pass

# Listar alla kunder
def showCustomers (database):
    print ("Lista på kunder:")
    for customer in database.customers ():
        print ("%s har klippt sig %d ggr" % (customer, customer.nVisits))

# Listar kunder med kommande bonusklippningar
def showBonusCuts (database):
    print ("Lista på kunder med gratisklippning:")
    for customer in database.customers ():
        if customer.hasBonusCut ():
            print ("%s har klippt sig %d ggr" % (customer, customer.nVisits))

# Ny klippning
def newVisit (database):
    pnr = input ("Ange personnummer: ")
    customer = database.lookup (pnr)
    if customer:
        customer.hairCut ()
        print ("Klippning registrerad.")
    else:
        print ("Hittade ej kund med det personnumret.")
        ans = input ("Vill du lägga till kunden (ja/nej)? ")
        if ans == "ja":
            # registrera med den aktuella klippningen inräknad
            newCustomer (database, pnr, 1)

# Lägg till ny kund
# Begär in namn, efternamn och personnummer från användaren
# och lägg in i databasen. Om personnumret inte finns, fråga
# om det ska läggas till.
def newCustomer (database, pnr = "", nVisits = 0):
    name = input ("Ange namn: ")
    surname = input ("Ange efternamn: ")
    if not pnr:
        pnr = input ("Ange personnummer: ")
    database.add (Customer (name, surname, pnr, nVisits))
    print ("Ny kund har registrerats")

# Avsluta programmet (se till att databasen sparas)
def quitProgram (database):
    database.close ()
    print ("""Kunddatabasen nedstängd.
Tack och hej!""")

def main ():    
    # Introduktionstext
    print ("""Välkommen till kundregistret
Laddar in databasen...""")

    # Skapa databasen
    database = Database ("customers.dat")

    print ("...inladdad!")

    # Programmets huvudloop
    ans = mainMenu ()
    while ans != CHOICE_QUIT_PROGRAM:
        if ans == CHOICE_SHOW_CUSTOMERS:
            showCustomers (database)
        elif ans == CHOICE_SHOW_BONUS:
            showBonusCuts (database)
        elif ans == CHOICE_NEW_CUSTOMER:
            newCustomer (database)
        elif ans == CHOICE_NEW_VISIT:
            newVisit (database)
        else:
            print ("Internt fel.")
            exit (1)
        ans = mainMenu ()
    quitProgram (database)

main ()
