# ==========================================================
#  ÜTEMEZŐ – egy kis projekttervező program
#  Kiszámolja, melyik feladat mikor kezdődik, kirajzolja a
#  Gantt-diagramot, és figyelmeztet a gondokra.
#  A program leírása: F8 – dokumentáció
#
#  FIGYELEM: a program FÉLKÉSZ! A kollégánk itt hagyta abba.
#  A hiányzó részeket TODO jelöli. Keresd meg őket: Ctrl + F → TODO
# ==========================================================

# --- BEÁLLÍTÁSOK --------------------------------------------
BLOKK = "██"     # így néz ki egy hét, amikor dolgozunk a feladaton
URES = " ·"      # így néz ki egy üres hét
LIMIT = 2        # ennél több feladata egy embernek egy héten nem lehet

# --- AZ ADATOK: a projekt feladatai -------------------------
# Minden feladat egy szótár (dictionary):
#   id         a feladat sorszáma
#   nev        a feladat neve
#   felelos    ki csinálja
#   idotartam  hány hétig tart
#   fugg       melyik feladatok után kezdődhet (sorszámok listája)
#   merfoldko  True, ha a feladat vége egy mérföldkő
feladatok = [
    {"id": 1, "nev": "Felmérés",     "felelos": "Anna",   "idotartam": 1, "fugg": [],     "merfoldko": False},
    {"id": 2, "nev": "Tervezés",     "felelos": "Bence",  "idotartam": 2, "fugg": [1],    "merfoldko": False},
    {"id": 3, "nev": "Árajánlat",    "felelos": "Csilla", "idotartam": 1, "fugg": [2],    "merfoldko": False},
    {"id": 4, "nev": "Megvalósítás", "felelos": "Dani",   "idotartam": 2, "fugg": [2],    "merfoldko": True},
    {"id": 5, "nev": "Dokumentáció", "felelos": "Anna",   "idotartam": 2, "fugg": [4],    "merfoldko": False},
    {"id": 6, "nev": "Bemutató",     "felelos": "Bence",  "idotartam": 1, "fugg": [3, 5], "merfoldko": True},
]

# --- AZ ADATOK: a saját teendőim (a sürgős-fontos mátrixhoz) --
teendok = [
    {"nev": "matekdolgozat holnap",      "fontos": True,  "surgos": True},
    {"nev": "projekt: igénylista",       "fontos": True,  "surgos": False},
    {"nev": "edzés",                     "fontos": True,  "surgos": False},
    {"nev": "egy barát kér egy szívességet", "fontos": False, "surgos": True},
    {"nev": "céltalan görgetés",         "fontos": False, "surgos": False},
]


# --- FÜGGVÉNYEK ---------------------------------------------

def keres(feladatok, sorszam):
    """Visszaadja azt a feladatot, amelyiknek ez a sorszáma (id)."""
    for f in feladatok:
        if f["id"] == sorszam:
            return f
    return None


def kezdesek_kiszamitasa(feladatok):
    """Minden feladathoz kiszámolja, melyik héten kezdődik és melyik héten ér véget.
    Egy feladat akkor kezdődhet, ha az összes olyan feladat kész, amelytől függ."""
    for f in feladatok:
        if len(f["fugg"]) == 0:
            f["kezdes"] = 1
        else:
            legkesobbi_vege = 0
            for elozo_id in f["fugg"]:
                elozo = keres(feladatok, elozo_id)
                if elozo["vege"] > legkesobbi_vege:
                    legkesobbi_vege = elozo["vege"]
            f["kezdes"] = legkesobbi_vege + 1
        f["vege"] = f["kezdes"] + f["idotartam"] - 1


def feladatok_kiirasa(feladatok):
    """Kiírja a feladatokat táblázatban."""
    print(f"{'#':<3}{'Feladat':<15}{'Felelős':<9}{'Kezdés':>7}{'Vége':>6}")
    for f in feladatok:
        print(f"{f['id']:<3}{f['nev']:<15}{f['felelos']:<9}{f['kezdes']:>7}{f['vege']:>6}")


def projekt_hossza(feladatok):
    """Hány hétig tart az egész projekt? (A legkésőbb véget érő feladat vége.)"""
    # TODO 1: menj végig a feladatokon, és keresd meg a legnagyobb "vege" értéket!
    #         Amíg ez nincs kész, a program 0 hetet mond, és üres a Gantt-diagram.
    hossz = 0
    return hossz


def gantt_rajzolas(feladatok):
    """Kirajzolja a Gantt-diagramot a képernyőre."""
    hetek = projekt_hossza(feladatok)
    fejlec = f"{'Feladat':<15}{'Felelős':<9}"
    for het in range(1, hetek + 1):
        fejlec += f"{het:>2}"
    print(fejlec)
    for f in feladatok:
        sor = f"{f['nev']:<15}{f['felelos']:<9}"
        for het in range(1, hetek + 1):
            # TODO 2: a feltétel legyen igaz, ha a "het" a feladat kezdése és vége között van!
            if False:
                sor += BLOKK
            else:
                sor += URES
        # TODO 3: ha a feladat mérföldkő, írj a sor végére egy ◆ jelet!
        print(sor)


def szuk_keresztmetszet(feladatok):
    """Melyik feladatra vár a legtöbb másik feladat? Az a szűk keresztmetszet."""
    darab = {}
    for f in feladatok:
        darab[f["id"]] = 0
    for f in feladatok:
        for elozo_id in f["fugg"]:
            darab[elozo_id] += 1
    # TODO 4: most mindig az 1-es feladatot adja vissza. Keresd meg azt a sorszámot,
    #         amelyikhez a legnagyobb szám tartozik a "darab" szótárban!
    legtobb_id = 1
    return keres(feladatok, legtobb_id), darab[legtobb_id]


def tulterheltseg(feladatok):
    """Hetenként megnézi, van-e olyan ember, akinek LIMIT-nél több feladata van."""
    # TODO 6 (nehéz): hetenként számold meg, kinek hány feladata van abban a hétben,
    #   és ha valakinek LIMIT-nél több, írd ki: "FIGYELEM: 4. héten Dani túlterhelt (3 feladat)!"
    #   Ha senki sem túlterhelt, írd ki: "Senki sem túlterhelt."
    #   Lépések:
    #   1. ciklus a heteken: for het in range(1, projekt_hossza(feladatok) + 1):
    #   2. minden héten egy üres szótár: szamlalo = {}
    #   3. ciklus a feladatokon: ha a feladat abban a hétben fut, a felelősének +1
    #   4. a hét végén: aki LIMIT fölött van, arról figyelmeztetés
    print("(Ez a rész még nincs kész.)")


def matrix(teendok):
    """A teendőket a sürgős-fontos mátrix négy negyedébe sorolja."""
    negyedek = {"1. MOST CSINÁLD": [], "2. TERVEZD BE": [], "3. ADD ÁT / GYORSAN": [], "4. HAGYD EL": []}
    for t in teendok:
        if t["fontos"] and t["surgos"]:
            negyedek["1. MOST CSINÁLD"].append(t["nev"])
        # TODO 5: hiányzik a 2. és a 3. negyed! Most minden más a 4.-be kerül.
        else:
            negyedek["4. HAGYD EL"].append(t["nev"])
    for nev in negyedek:
        print(nev + ": " + ", ".join(negyedek[nev]))


# --- A FŐPROGRAM --------------------------------------------
kezdesek_kiszamitasa(feladatok)

print("=== FELADATOK ===")
feladatok_kiirasa(feladatok)

print()
print("=== GANTT-DIAGRAM ===")
gantt_rajzolas(feladatok)
print(f"A projekt hossza: {projekt_hossza(feladatok)} hét")

print()
print("=== SZŰK KERESZTMETSZET ===")
f, db = szuk_keresztmetszet(feladatok)
print(f"{f['nev']} ({f['felelos']}): {db} feladat vár rá")

print()
print("=== TÚLTERHELTSÉG ===")
tulterheltseg(feladatok)

print()
print("=== SÜRGŐS-FONTOS MÁTRIX ===")
matrix(teendok)
