import sqlite3
import json
from pathlib import Path

BASE_DIR = Path("/home/dayhanbiz/public_html/Библиотека 3-DAMJA")
DB_PATH = BASE_DIR / "search_databases" / "library_search.db"
EXTRACTED_DIR = BASE_DIR / "extracted_texts"
CATALOG_DIR = BASE_DIR / "catalog"

def init_db(conn):
    cursor = conn.cursor()
    
    # Таблица для полнотекстового поиска по страницам
    cursor.execute('''
        CREATE VIRTUAL TABLE IF NOT EXISTS pages_fts USING fts5(
            book_hash,
            page_number,
            content
        )
    ''')
    conn.commit()

def build_index():
    DB_PATH.parent.mkdir(parents=True, exist_ok=True)
    
    # Сбрасываем старую базу, чтобы построить честный индекс страниц
    if DB_PATH.exists():
        DB_PATH.unlink()
        
    print(f"=== Запуск индексации страниц в БД: {DB_PATH.name} ===")
    
    conn = sqlite3.connect(DB_PATH)
    init_db(conn)
    cursor = conn.cursor()

    indexed_count = 0

    # Проходим по всем папкам с текстами книг
    if EXTRACTED_DIR.exists():
        for book_dir in EXTRACTED_DIR.iterdir():
            if book_dir.is_dir():
                book_hash = book_dir.name
                for page_file in book_dir.glob("page_*.txt"):
                    try:
                        # Извлекаем номер страницы из имени файла (например, page_0012.txt -> 12)
                        page_num_str = page_file.stem.split('_')[1]
                        page_number = int(page_num_str)
                        
                        with open(page_file, 'r', encoding='utf-8', errors='ignore') as f:
                            text_content = f.read()
                            
                        if text_content.strip():
                            cursor.execute('''
                                INSERT INTO pages_fts (book_hash, page_number, content)
                                VALUES (?, ?, ?)
                            ''', (book_hash, page_number, text_content))
                            indexed_count += 1
                    except Exception as e:
                        print(f"Ошибка при индексации файла {page_file}: {e}")

    conn.commit()
    conn.close()
    
    print(f"=== Индексация завершена ===")
    print(f"Успешно проиндексировано страниц текстов: {indexed_count}")

if __name__ == "__main__":
    build_index()
