import pandas as pd
import os
from flask import Flask, request, render_template_string

app = Flask(__name__)

EXCEL_FILE = r"sefaria_authors_he.xlsx"

# משתנים גלובליים לשמירת האקסל בזיכרון לחיפוש מהיר
df_authors = None
df_works = None
has_works = False

ERA_MAP = {
    "T": "תנאים",
    "A": "אמוראים",
    "GN": "גאונים",
    "RI": "ראשונים",
    "AH": "אחרונים",
    "CO": "חכמי זמננו"
}

def load_data():
    global df_authors, df_works, has_works
    if not os.path.exists(EXCEL_FILE):
        return False
    
    xls = pd.ExcelFile(EXCEL_FILE)
    if "מחברים_מרוכז" in xls.sheet_names:
        df_authors = pd.read_excel(xls, sheet_name="מחברים_מרוכז")
    if "חיבורים_וכתבים" in xls.sheet_names:
        df_works = pd.read_excel(xls, sheet_name="חיבורים_וכתבים")
        has_works = True
    return True

HTML_TEMPLATE = """
<!DOCTYPE html>
<html dir="rtl" lang="he">
<head>
    <meta charset="UTF-8">
    <title>חיפוש מחברים - ספריא</title>
    <style>
        body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f4f4f9; color: #333; margin: 0; padding: 20px; }
        .search-container { max-width: 900px; margin: 0 auto 30px auto; background: white; padding: 20px; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.1); text-align: center; }
        .search-box { width: 70%; padding: 12px; font-size: 16px; border: 1px solid #ccc; border-radius: 4px; outline: none; }
        .search-box:focus { border-color: #3498db; }
        .search-btn { padding: 12px 25px; font-size: 16px; background-color: #3498db; color: white; border: none; border-radius: 4px; cursor: pointer; font-weight: bold; }
        .search-btn:hover { background-color: #2980b9; }
        .container { max-width: 900px; margin: auto; background: white; padding: 30px; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.1); margin-bottom: 30px; }
        h1 { color: #2c3e50; margin-top: 0; padding-bottom: 10px; border-bottom: 2px solid #3498db; }
        .category { font-size: 14px; color: #7f8c8d; margin-bottom: 15px; font-weight: bold; }
        .description { font-size: 16px; line-height: 1.6; margin-bottom: 20px; }
        .grid { display: flex; gap: 30px; flex-wrap: wrap; }
        .main-column { flex: 2; min-width: 300px; }
        .side-column { flex: 1; min-width: 250px; background: #fdfdfd; padding: 15px; border-radius: 6px; border: 1px solid #eee; }
        .section { margin-top: 20px; }
        .section h2 { font-size: 18px; color: #2980b9; border-bottom: 1px solid #ddd; padding-bottom: 5px; margin-bottom: 10px; }
        .links a { display: inline-block; margin-bottom: 8px; color: #3498db; text-decoration: none; font-weight: bold; }
        .links a:hover { text-decoration: underline; }
        .list-item { margin-bottom: 8px; padding: 10px; background: #f9f9f9; border-right: 4px solid #3498db; border-radius: 4px; line-height: 1.4; }
        .meta-data { font-size: 14px; color: #555; margin-bottom: 5px; line-height: 1.4; }
        .msg { text-align: center; font-size: 18px; color: #e74c3c; font-weight: bold; }
        .results-count { text-align: center; font-size: 16px; color: #27ae60; margin-bottom: 20px; font-weight: bold; }
        .work-desc { font-size: 0.85em; color: #666; margin-top: 4px; line-height: 1.3; }
    </style>
</head>
<body>

<div class="search-container">
    <h2>חיפוש כרטיסי מחבר (מתוך אקסל)</h2>
    <form method="GET" action="/">
        <input type="text" name="q" class="search-box" placeholder="הכנס שם מחבר (למשל: אבודרהם)..." value="{{ query or '' }}" autofocus>
        <button type="submit" class="search-btn">חפש</button>
    </form>
</div>

{% if query %}
    {% if not results %}
        <div class="msg">לא נמצאו תוצאות עבור: '{{ query }}'</div>
    {% else %}
        <div class="results-count">נמצאו {{ results|length }} תוצאות</div>
        {% for author in results %}
            <div class="container">
                <h1>{{ author.name }}</h1>
                <div class="category">מחברים / {{ author.slug }}</div>
                <div class="description">{{ author.bio }}</div>
                
                <div class="grid">
                    <div class="main-column">
                        <div class="section">
                            <h2>חיבורים וכתבים בספריא</h2>
                            {{ author.works_html | safe }}
                        </div>
                        <div class="section">
                            <h2>ציטוטים עיקריים</h2>
                            {{ author.cit_html | safe }}
                        </div>
                    </div>
                    <div class="side-column">
                        <div class="section">
                            <h2>תקופת פעילות</h2>
                            {{ author.lived_html | safe }}
                        </div>
                        <div class="section">
                            <h2>לקריאה נוספת</h2>
                            <div class="links">{{ author.links_html | safe }}</div>
                        </div>
                        <div class="section">
                            <h2>קשרים</h2>
                            {{ author.conn_html | safe }}
                        </div>
                    </div>
                </div>
            </div>
        {% endfor %}
    {% endif %}
{% endif %}

</body>
</html>
"""

@app.route("/")
def index():
    query = request.args.get("q", "").strip()
    results_list = []
    
    if query:
        if df_authors is None:
            loaded = load_data()
            if not loaded:
                return f"<h2>שגיאה: הקובץ לא נמצא בנתיב: {EXCEL_FILE}</h2>"
                
        # עמודות לחיפוש השם
        name_cols = ["שם_בעברית", "שם_באנגלית", "כותרת_ראשית_עברית", "כותרת_ראשית_אנגלית", "שם_בכרטיס_עברית"]
        existing_name_cols = [col for col in name_cols if col in df_authors.columns]
        
        # יצירת מסנן (חיפוש חלקי ללא התחשבות באותיות רישיות)
        mask = pd.Series(False, index=df_authors.index)
        for col in existing_name_cols:
            mask = mask | df_authors[col].fillna("").str.contains(query, case=False, na=False)
            
        results = df_authors[mask]
        
        # יצירת אובייקטים להצגה באתר
        for index, row in results.iterrows():
            def get_val(col):
                if col in df_authors.columns and pd.notna(row[col]) and str(row[col]).strip() != "":
                    return str(row[col]).strip()
                return None

            slug = row.get("מזהה_קצר", "לא ידוע")
            name = row.get("שם_בעברית") or row.get("כותרת_ראשית_עברית") or slug
            bio = get_val("תיאור_עברית") or get_val("תיאור_כרטיס") or "אין תיאור זמין במערכת."
            
            wiki_he = get_val("מאפיין__קישור_ויקיפדיה_עברית")
            je_link = get_val("מאפיין__קישור_אנציקלופדיה_יהודית")
            links_html = ""
            if wiki_he: links_html += f'<a href="{wiki_he}" target="_blank">ויקיפדיה</a><br>'
            if je_link: links_html += f'<a href="{je_link}" target="_blank">האנציקלופדיה היהודית</a><br>'
            if not links_html: links_html = '<span class="meta-data">אין קישורים זמינים</span>'

            birth = get_val("מאפיין__שנת_לידה")
            death = get_val("מאפיין__שנת_פטירה")
            era = get_val("מאפיין__תקופה")
            lived_html = ""
            if birth and death:
                lived_html += f'<div class="meta-data">{birth.replace(".0", "")} - {death.replace(".0", "")} לספירה</div>'
            elif birth: lived_html += f'<div class="meta-data"><b>שנת לידה:</b> {birth.replace(".0", "")}</div>'
            elif death: lived_html += f'<div class="meta-data"><b>שנת פטירה:</b> {death.replace(".0", "")}</div>'
            if era:
                era_hebrew = ERA_MAP.get(str(era).strip().upper(), era)
                lived_html += f'<div class="meta-data"><b>תקופה:</b> {era_hebrew}</div>'
            if not lived_html: lived_html = '<div class="meta-data">לא ידוע</div>'

            conn_html = ""
            # מעבר אוטומטי על כל עמודות הקשרים והצגת כל מידע שנמצא
            for col in df_authors.columns:
                if col.startswith("קשרים__") and col.endswith("__כותרות_עברית"):
                    rel_val = get_val(col)
                    if rel_val:
                        rel_name = col.replace("קשרים__", "").replace("__כותרות_עברית", "").replace("_", " ")
                        conn_html += f'<div class="meta-data"><b>{rel_name}:</b> {rel_val}</div>'
            if not conn_html: conn_html = '<div class="meta-data">לא נמצאו תעודות</div>'

            citations = get_val("ציטוטים_ומקורות__כתיבה_פופולרית_של__הפניות")
            cit_html = ""
            if citations:
                for cit in citations.split("|"):
                    cit_html += f'<div class="list-item">{cit.strip()}</div>'
            else:
                cit_html = '<div class="meta-data">אין ציטוטים בולטים</div>'
            
            works_html = ""
            if has_works and pd.notna(slug):
                if "מזהה_קצר_מחבר" in df_works.columns:
                    author_works = df_works[df_works["מזהה_קצר_מחבר"] == slug]
                    if not author_works.empty:
                        for _, work_row in author_works.iterrows():
                            work_title = work_row.get("כותרת_חיבור_עברית")
                            if pd.isna(work_title) or not str(work_title).strip():
                                work_title = work_row.get("כותרת_חיבור_אנגלית", "ללא שם")
                            
                            work_desc = work_row.get("תיאור_חיבור_עברית")
                            if pd.isna(work_desc) or not str(work_desc).strip():
                                work_desc = work_row.get("תיאור_חיבור_אנגלית", "")
                                
                            desc_html = f'<div class="work-desc">{work_desc}</div>' if pd.notna(work_desc) and str(work_desc).strip() else ""
                            works_html += f'<div class="list-item"><b>{work_title}</b>{desc_html}</div>'
            if not works_html: works_html = '<div class="meta-data">אין חיבורים המקושרים למחבר זה.</div>'

            results_list.append({
                "slug": slug,
                "name": name,
                "bio": bio,
                "links_html": links_html,
                "lived_html": lived_html,
                "conn_html": conn_html,
                "cit_html": cit_html,
                "works_html": works_html
            })

    return render_template_string(HTML_TEMPLATE, query=query, results=results_list)

if __name__ == "__main__":
    print("טוען נתונים מהאקסל לזיכרון... אנא המתן שניות בודדות.")
    load_data()
    print("===================================================")
    print("השרת פועל! פתח את הדפדפן שלך בכתובת הבאה:")
    print("http://127.0.0.1:5000")
    print("===================================================")
    app.run(host="127.0.0.1", port=5000, debug=True)
