# study_buddy.py
# Study Buddy — απλό πρόγραμμα για μαθητές/τριγυμνασίου
# Τρέχει στο Thonny (Python 3). 
# Σκοπός: πρακτική σε Μαθηματικά, Μικρό Quiz Βιολογίας/Φυσικής, Flashcards Ιστορίας.
# Γράφτηκε για να είναι κατανοητό και εύκολα επεκτάσιμο.

import random
import json
import os

SCORE_FILE = "study_buddy_scores.json"

# ---------- Βοηθητικές συναρτήσεις ----------
def load_scores():
    if not os.path.exists(SCORE_FILE):
        return {}
    try:
        with open(SCORE_FILE, "r", encoding="utf-8") as f:
            return json.load(f)
    except Exception:
        return {}

def save_score(user, topic, points):
    scores = load_scores()
    if user not in scores:
        scores[user] = {}
    scores[user][topic] = scores[user].get(topic, 0) + points
    with open(SCORE_FILE, "w", encoding="utf-8") as f:
        json.dump(scores, f, ensure_ascii=False, indent=2)

def clear_screen():
    # απλό "καθάρισμα" οθόνης (δουλεύει στο Thonny)
    print("\n" * 2)

def ask_continue():
    input("\nΠατήστε Enter για επιστροφή στο μενού...")

# ---------- Ενότητα: Μαθηματικά (πρακτικά προβλήματα) ----------
def math_practice():
    clear_screen()
    print("=== Μαθηματικά — Πρακτική ===")
    print("Επιλογές: 1) Προβλήματα ποσοστών  2) Απλές εξισώσεις  3) Περιοχή/Περίμετρο")
    choice = input("Επίλεξε (1/2/3): ").strip()
    correct = 0

    if choice == "1":
        # Ποσοστά: π.χ. πόσα είναι το 15% του 240;
        for _ in range(3):
            base = random.randint(20, 500)
            pct = random.choice([5,10,12,15,20,25])
            answer = (pct/100) * base
            user = input(f"Πόσο είναι το {pct}% του {base}; ")
            try:
                if abs(float(user) - answer) < 0.1:
                    print("Σωστά!")
                    correct += 1
                else:
                    print(f"Λάθος — Σωστή απάντηση: {round(answer,2)}")
            except:
                print(f"Μη έγκυρη απάντηση. Σωστό: {round(answer,2)}")

    elif choice == "2":
        # Απλές εξισώσεις: ax + b = c
        for _ in range(3):
            a = random.randint(1,9)
            x = random.randint(-10,10)
            b = random.randint(-10,10)
            c = a*x + b
            user = input(f"Βρες x από: {a}x + ({b}) = {c}   -> x = ")
            try:
                if int(user) == x:
                    print("Σωστά!")
                    correct += 1
                else:
                    print(f"Λάθος — x = {x}")
            except:
                print(f"Μη έγκυρη απάντηση. x = {x}")

    elif choice == "3":
        # Περιοχή/Περίμετρο για ορθογώνιο/κύκλο (απλές τιμές)
        for _ in range(3):
            shape = random.choice(["rectangle", "circle"])
            if shape == "rectangle":
                a = random.randint(2,12)
                b = random.randint(2,12)
                per = 2*(a+b)
                area = a*b
                user = input(f"Ορθογώνιο με πλευρές {a} και {b}. Δώσε περιοχή. ")
                try:
                    if abs(float(user)-area) < 0.1:
                        print("Σωστά!")
                        correct += 1
                    else:
                        print(f"Λάθος — Περιοχή = {area}")
                except:
                    print(f"Μη έγκυρη απάντηση. Περιοχή = {area}")
            else:
                r = random.randint(1,7)
                area = 3.14159 * r * r
                user = input(f"Κύκλος ακτίνας {r}. Σχετική προσέγγιση περιοχής (2 δεκαδικά): ")
                try:
                    if abs(float(user) - area) < 0.5:
                        print("Σωστά (αποδεκτό)!")
                        correct += 1
                    else:
                        print(f"Λάθος — Περιοχή ≈ {round(area,2)}")
                except:
                    print(f"Μη έγκυρη απάντηση. Περιοχή ≈ {round(area,2)}")
    else:
        print("Άκυρη επιλογή.")
        ask_continue()
        return

    print(f"\nΑπαντήθηκαν σωστά {correct} από 3.")
    user = input("Πώς σε λένε; ").strip()
    if user:
        save_score(user, "Math", correct)
        print("Βαθμοί αποθηκεύτηκαν.")
    ask_continue()

# ---------- Ενότητα: Μικρό Quiz Βιολογίας/Φυσικών ----------
def science_quiz():
    clear_screen()
    print("=== Μίνι Quiz: Βιολογία / Φυσικά ===")
    questions = [
        ("Ποιο οργανίδιο του κυττάρου περιέχει το DNA;", "πυρήνας"),
        ("Ποια είναι η μονάδα μέτρησης της δύναμης;", "νιούτον"),
        ("Ποιο όργανο αντλεί αίμα στο σώμα;", "καρδιά"),
        ("Τι είναι η φωτοσύνθεση, σε μία πρόταση;", "η διαδικασία που τα φυτά παράγουν τροφή/γλυκόζη από φως"),
        ("Ποιο αέριο χρειάζονται τα ψυκτικά φυτά για την αναπνοή (και εμείς) ;", "οξυγόνο"),
    ]
    random.shuffle(questions)
    correct = 0
    for q, a in questions[:4]:
        user = input(q + " ").strip().lower()
        if a in user or user in a or user == a:
            print("Σωστά!")
            correct += 1
        else:
            print(f"Λίγο διαφορετικά — σωστή απάντηση (σύντομη): {a}")

    print(f"\nΣωστές απαντήσεις: {correct}/4")
    user = input("Πώς σε λένε; ").strip()
    if user:
        save_score(user, "Science", correct)
        print("Αποθηκεύτηκαν οι βαθμοί σου.")
    ask_continue()

# ---------- Ενότητα: Flashcards Ιστορίας ----------
def history_flashcards():
    clear_screen()
    print("=== Flashcards Ιστορίας ===")
    cards = [
        ("Πότε ξεκίνησε η Ελληνική Επανάσταση;", "1821"),
        ("Ποιος ήταν ο Σαλαμινομάχος βασιλιάς (ήρωας της Αρχαίας Ελλάδας);", "θεμιστοκλής"),
        ("Τι ήταν η Βυζαντινή Αυτοκρατορία;", "η συνέχεια της ρωμαϊκής εξουσίας στην ανατολή"),
        ("Τι σημαίνει 'Αποικιοκρατία';", "η κατάκτηση/εκμετάλλευση περιοχών από ξένες χώρες"),
    ]
    random.shuffle(cards)
    for q, a in cards:
        print("\nQ:", q)
        input("Πάτα Enter για να δεις την απάντηση...")
        print("A:", a)
    ask_continue()

# ---------- Ενότητα: Βασικά Αγγλικά — Λεξιλόγιο ----------
def english_vocab_quiz():
    clear_screen()
    print("=== Αγγλικά — Μικρό λεξιλόγιο ===")
    pairs = [
        ("house", "σπίτι"),
        ("school", "σχολείο"),
        ("teacher", "δασκάλος"),
        ("book", "βιβλίο"),
        ("friend", "φίλος"),
    ]
    random.shuffle(pairs)
    correct = 0
    for en, gr in pairs[:4]:
        user = input(f"Τι σημαίνει '{en}' στα ελληνικά; ").strip().lower()
        if user == gr:
            print("Σωστά!")
            correct += 1
        else:
            print(f"Λάθος — Σωστό: {gr}")
    print(f"\nΣωστά: {correct}/4")
    user = input("Πώς σε λένε; ").strip()
    if user:
        save_score(user, "English", correct)
    ask_continue()

# ---------- Κύριο μενού ----------
def main_menu():
    clear_screen()
    print("=== Study Buddy — Γ' Γυμνασίου ===")
    print("1) Μαθηματικά — πρακτική")
    print("2) Μίνι Quiz Βιολογίας/Φυσικών")
    print("3) Flashcards Ιστορίας")
    print("4) Αγγλικά — λεξιλόγιο")
    print("5) Δες αποθηκευμένους βαθμούς")
    print("0) Έξοδος")
    choice = input("Επίλεξε: ").strip()
    return choice

def show_scores():
    clear_screen()
    scores = load_scores()
    if not scores:
        print("Δεν βρέθηκαν αποθηκευμένοι βαθμοί.")
    else:
        print("Αποθηκευμένοι βαθμοί (όνομα -> αντικείμενα):\n")
        for user, topics in scores.items():
            print(f"- {user}:")
            for t, v in topics.items():
                print(f"    {t}: {v}")
    ask_continue()

def welcome():
    clear_screen()
    print("Καλώς ήρθες στο Study Buddy!")
    print("Αυτό το πρόγραμμα βοηθάει με μικρές επαναλήψεις στα βασικά μαθήματα.")
    print("Μην διστάσεις να τροποποιήσεις τις ερωτήσεις και να προσθέσεις νέες.\n")

def main():
    welcome()
    while True:
        choice = main_menu()
        if choice == "1":
            math_practice()
        elif choice == "2":
            science_quiz()
        elif choice == "3":
            history_flashcards()
        elif choice == "4":
            english_vocab_quiz()
        elif choice == "5":
            show_scores()
        elif choice == "0":
            print("Γεια σου — καλή μελέτη!")
            break
        else:
            print("Μη έγκυρη επιλογή. Δοκίμασε ξανά.")
            ask_continue()

if __name__ == "__main__":
    main()
