#!/usr/bin/env python3
import sys
import json
import pymorphy3
import mysql.connector
from mysql.connector import Error

keyword = sys.argv[1] if len(sys.argv) > 1 else ""

try:
    morph = pymorphy3.MorphAnalyzer()
    parsed = morph.parse(keyword)[0]
    forms = set()
    for form in parsed.lexeme:
        forms.add(form.word.lower())
    forms = list(forms)
except:
    forms = [keyword.lower()]

# Подключаемся к базе
try:
    db = mysql.connector.connect(
        host='localhost',
        user='dayhanbiz_biblioteka_index',
        password='HN_+@(ngb25642r1',
        database='dayhanbiz_biblioteka_index'
    )
    cursor = db.cursor(dictionary=True)
    
    placeholders = ','.join(['%s'] * len(forms))
    sql = f"""
        SELECT 
            b.relative_url,
            b.title,
            b.folder_theme,
            COUNT(*) as mention_count,
            GROUP_CONCAT(DISTINCT p.page_number ORDER BY p.page_number) as pages,
            MAX(p.full_content) as content
        FROM word_index wi
        JOIN pages p ON wi.page_id = p.id
        JOIN books b ON p.book_id = b.id
        WHERE wi.word IN ({placeholders})
        GROUP BY b.id
        ORDER BY mention_count DESC
    """
    
    cursor.execute(sql, forms)
    results = cursor.fetchall()
    
    # Формируем excerpt (750 до + 750 после)
    for row in results:
        text = row['content'] or ""
        pos = text.lower().find(keyword.lower())
        if pos == -1:
            pos = 0
        start = max(0, pos - 750)
        end = min(len(text), pos + 750 + len(keyword))
        row['excerpt'] = text[start:end].replace('\n', ' ').strip()
    
    print(json.dumps({
        "success": True,
        "keyword": keyword,
        "forms": forms,
        "results": results,
        "total": len(results)
    }, ensure_ascii=False, indent=2))

except Error as e:
    print(json.dumps({"success": False, "error": str(e)}, ensure_ascii=False))
except Exception as e:
    print(json.dumps({"success": False, "error": str(e)}, ensure_ascii=False))
finally:
    if 'db' in locals() and db.is_connected():
        db.close()
