"""
2011. október: Pitypang
@author Klemand66
"""

print("\n1. feladat\n")

betxt = open("honapok.txt")

honapok=[]
for i in range(12):
    honap=[(betxt.readline().strip())]          # a hónap neve, nem használjuk
    honap.append(int(betxt.readline().strip())) # napok száma
    honap.append(int(betxt.readline().strip())) # az év hónapkezdő napja
    honapok.append(honap)

betxt.close()

nyk,oszk=121,244 # a nyári és észi időszak kezdőnapja

betxt = open("pitypang.txt")

fdb=int(betxt.readline().strip())

foglalasok=[]
for i in range(fdb):
    darsor=betxt.readline().strip().split()
    foglalas=[int(darsor[0])]       # sorszám, az index+1 alapján is tudnánk
    foglalas.append(int(darsor[1])) # szobaszám
    foglalas.append(int(darsor[2])) # érkezés napja
    foglalas.append(int(darsor[3])) # távozás napja
    foglalas.append(int(darsor[4])) # vendégek száma
    foglalas.append(int(darsor[5])) # reggeli (1: igen, 1: nem)
    foglalas.append(darsor[6])      # a foglalás azonosítója
    foglalasok.append(foglalas)
    
betxt.close()
print("A beolvasás és a szövegfájl lezárása sikeresen befejeződött.")



print("\n2. feladat\n")

print("A leghosszabb tartózkodás(ok)\n")

print("A map() függvénnyel:")

"""
A map() függvény segítségével egy többdimenziós lista
oszlopai alapján is készíthetünk listát:
"""
ejszdbk=list(map(lambda foglalas:foglalas[3]-foglalas[2],foglalasok))
lhtart=max(ejszdbk)
"""
A filter() függvénnyel könnyen megadhatjuk az összes leghosszabb tartózkodást is:
"""
lhindexek=list(filter(lambda i:ejszdbk[i]==lhtart,range(fdb)))
for i in lhindexek:
    print(f'{foglalasok[i][6]} ({foglalasok[i][2]}) - {lhtart}')

print("\nA max() függvénnyel:")
"""
Vagy közvetlenül alkalmazhatjuk most is a max() függvényt is
a lambda függvénnyel megadott kulcs segítségével:
"""
lhfoglalas=max(foglalasok, key=lambda foglalas:foglalas[3]-foglalas[2])
"""
Az lhfoglalás nem a leghosszabb tartózkodás idejét,
hanem az ehhez tartozó teljes rekordot (foglalást) tartalmazza
"""
print(f'{lhfoglalas[6]} ({lhfoglalas[2]}) - {lhfoglalas[3]-lhfoglalas[2]}')



print("\n3. feladat\n")

kitxt = open("bevetel.txt","w")

osszbev=0
for i,foglalas in enumerate(foglalasok):
    if foglalas[2]>=oszk:
        ear=8000
    elif foglalas[2]<nyk:
        ear=9000
    else:
        ear=10000
    bevetel=ejszdbk[i]*ear
    if foglalas[4]>2:
        bevetel+=ejszdbk[i]*2000
    if foglalas[5]==1:
        bevetel+=foglalas[4]*ejszdbk[i]*1100
    kitxt.write(f'{foglalas[0]}:{bevetel}\n')
    osszbev+=bevetel

kitxt.close()
print("A kiíratás és a szövegfájl lezárása sikeresen befejeződött.\n")

print(f'A szálloda teljes évi bevétele {osszbev:,} Ft.')



print("\n4. feladat\n")

def honaphatarozo(evnapja): # a feladat szerint nincs szökőév
    honaplistak=list(map(lambda honap: range(honap[2],honap[2]+honap[1]), honapok))
    bennevan=list(map(lambda honap: evnapja in honap, honaplistak))
    return bennevan.index(True)

vejdbk=[]    
for i in range(12):
    vejdbk.append(0)

for foglalas in foglalasok:
    for i in range(foglalas[2],foglalas[3]):
        aktindex=honaphatarozo(i)
        vejdbk[aktindex]+=foglalas[4]

print("Statisztika a havi vendégéjszakákról:")
for i,n in enumerate(vejdbk):
    print(f'{i+1:2}: {n:4} vendégéj')



print("\n5. feladat\n")

print("Kérem a foglalás adatait! Az időszak teljes egészében az idei évre essen!")

ujerk=int(input("Kérem az érkezés időpontjának sorszámát: "))
ujejdb=int(input("Kérem az eltölteni kívánt vendégéjszakák számát: "))

print("A megadott időszakban a következő szobák szabadok:")
szobadb=27
szabaddb=0

"""
    e ------o t
      ue -------o ut
Ütközés: ue<t és ut>e
"""

for i in range(1,szobadb+1):
    szabad=True
    for foglalas in foglalasok:
        if foglalas[1]==i:
            if (ujerk<foglalas[3] and ujerk+ujejdb>foglalas[2]):
                szabad=False
                break
    if szabad:
        print(i,end=" ")
        szabaddb+=1
        
print(f'\nA szabad szobák száma: {szabaddb}')


input("\nA befejezéshez nyomd meg az ENTER billentyűt!")

