from customer import *

# Database representerar en database med kunder på en frisörsalong

class Database:
    # filename: Filnamnet på kunddatabasen
    def __init__ (self, filename):
        self.filename = filename
        self.customerList = [] # lista på kunder i alfabetisk ordning
        self.customerDict = {} # tabell för snabbt uppslag av kund från pnr
        # läs in databasen
        self.readFromFile ()
        # bygg upp snabbuppslagstabellen
        for customer in self.customerList:
            self.customerDict[customer.pnr] = customer

    # Läs in databasen och lagra i attributet customerList
    def readFromFile (self):
        f = open (self.filename)
        # läs in första raden i filen (för användning i loopvillkor)
        name = f.readline ().strip ()
        while name:
            # läs in resten av kundinformationen
            surname = f.readline ().strip ()
            pnr = f.readline ().strip ()
            nVisits = int (f.readline ().strip ())
            # skapa ny kund
            self.customerList.append (Customer (name, surname, pnr, nVisits))
            # läs in namn på nästa kund (loopvillkor)
            name = f.readline ().strip ()

    # Spara databasen i customerList på fil
    def writeToFile (self):
        f = open (self.filename, "w")
        for customer in self.customerList:
            print (customer.name, file = f)
            print (customer.surname, file = f)
            print (customer.pnr, file = f)
            print (customer.nVisits, file = f)
        f.close ()

    # Lista med alla kunder
    # Returnerar en lista med kundobjekt
    def customers (self):
        return self.customerList

    # Lista med de kunder som har gratis klippning
    def bonusCuts (self):
        bonusCuts = []
        for customer in self.customerList:
            if customer.hasBonusCut ():
                bonusCuts.append (customer)
        return bonusCuts

    # Stänger ned databasen
    # Skriver ut databasen på fil genom anrop till writeToFile
    def close (self):
        self.writeToFile ()

    # Lägger till ny kund i databasen
    # customer: instans av Customer
    def add (self, customer):
        self.customerDict[customer.pnr] = customer
        self.customerList.append (customer)
        self.customerList.sort ()

    # Slå upp kund från personnummer
    # pnr: personnummer (sträng)
    # Returner kundobjektet
    def lookup (self, pnr):
        return self.customerDict.get (pnr)
