import os
from avio import Avió
import sys

def estadisAgencies(avió, agencies):
    #
    # Cada agència manté un registre de les reserves fetes.
    # Estudiem si hi ha hagut "overbooking". Cada reserva
    # ha de tenir un seient únic.
    #
    freq = {}
    for ag in agencies:
        for r in ag.reserva.values():
            freq[r] = freq.get(r, 0) + 1
    if freq == {}:
        print("cap reserva feta. Avió tot ocupat d'abans")

    reserves = 0
    print("Seients amb més d'una reserva:")
    for f in sorted(freq):
        if freq[f] != 1:
            print(f, freq[f])
        else:
            reserves += freq[f]
    if reserves == len(freq):
        print('Places reservades sense "overbooking"')
    else:
        print(reserves, 'places OK de', len(freq))
    if reserves == avió.places():
        print("Tot l'avió ocupat")
    print("Reserves per agència")
    for ag in agencies:
        print('{:>6s}: {:6d}'.format(ag.nomAg,len(ag.reserva)))
    print("Clients per ordre temporal de reserva:")
    fmt = '{:>6s}: {:24s} {:s}'
    print(fmt.format('seient','client', 'data'))
    for s, reserva in sorted(((s, avió[s]) for s in avió),
                             key= lambda x: x[1][1]):
        client, data = reserva
        print(fmt.format(s, client, data))



def fitxersATractar(camíDir):
    lstFitxers= []
    for arrel, dirs, fitxers in os.walk(camíDir):
        for fitxer in fitxers:
            if fitxer.lower().startswith('registre') and \
               fitxer.lower().endswith('.csv'):
                lstFitxers.append(os.path.join(arrel, fitxer))
    return lstFitxers


class registreAgència:
    def __init__(self, nomAgència):
        self.nomAg = nomAgència
        self.reserva= {}


def principal(nomAvió, camíDir):
    lstFitxers = fitxersATractar(camíDir)
    agències=[]
    for nomf in lstFitxers:
        nomAgència = nomf.replace('registre','').replace('.csv','')
        agència = registreAgència(nomAgència)
        with open(nomf,'r') as f:
            for línia in f:
                client, seient = línia.strip().split(',')
                agència.reserva[client] = seient
        agències.append(agència)
    avió = Avió(nomAvió)
    estadisAgencies(avió, agències)

if __name__=='__main__':
    principal(sys.argv[1], sys.argv[2])

