import fitz
import sqlite3
import re
import os

PDF_PATH = '/var/www/html/PEPCVSON/sozlukentr.pdf'
DB_PATH = '/mnt/pdfs/dictionary_v2.db'

def create_preview_table():
    conn = sqlite3.connect(DB_PATH)
    c = conn.cursor()
    c.execute("DROP TABLE IF EXISTS sozluk_import_preview")
    c.execute("""
        CREATE TABLE sozluk_import_preview (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            en_term TEXT,
            tr_term TEXT,
            status TEXT DEFAULT 'pending'
        )
    """)
    conn.commit()
    conn.close()

def is_header_footer(text):
    text = text.strip()
    if not text: return True
    
    # Sayfa numarası (örn: "4 of 115" veya sadece rakam)
    if re.match(r'^\d+(\s+of\s+\d+)?$', text): return True
    
    # Bilinen Headerlar
    headers = [
        "Turkish Master Glossary",
        "TECHNICAL INFORMATION SERVICES",
        "CORPORATE TRANSLATIONS",
        "REVISION",
        "English US",
        "Turkish",
        "Symbols",
        "KSKKF"
    ]
    
    for h in headers:
        if h in text: return True
        
    # Tek harfli başlıklar (A, B, C...)
    if len(text) == 1 and text.isalpha() and text.isupper(): return True
    
    return False

def extract_terms():
    create_preview_table()
    
    doc = fitz.open(PDF_PATH)
    conn = sqlite3.connect(DB_PATH)
    c = conn.cursor()
    
    extracted_pairs = []
    
    # Buffer to hold lines until we form a pair
    # Strateji: Satır satır oku. Header değilse listeye at.
    # Liste: [EN1, TR1, EN2, TR2, ...] olmalı.
    
    clean_lines = []
    
    print("PDF Taranıyor...")
    
    # İlk 2 sayfa TOC olduğu için geç (3. sayfa 0-indexed -> 2)
    start_page = 2 
    
    for page_num in range(start_page, len(doc)):
        page = doc[page_num]
        text = page.get_text()
        
        lines = text.split('\n')
        for line in lines:
            line = line.strip()
            if not is_header_footer(line):
                clean_lines.append(line)

    print(f"Toplam {len(clean_lines)} satır veri okundu. Çiftleştiriliyor...")

    # Çiftleştirme
    # clean_lines şu formatta olmalı: EN, TR, EN, TR...
    # Bazen kayma olabilir, ama PDF yapısı çok düzenli görünüyor.
    
    count = 0
    for i in range(0, len(clean_lines) - 1, 2):
        en = clean_lines[i]
        tr = clean_lines[i+1]
        
        # Basit bir kontrol: EN genelde ingilizce karakter, TR türkçe karakter içerebilir.
        # Ama teknik terimlerde bu karışık.
        # Güvenli varsayım: Sıralı gidiyor.
        
        # Ekstra temizlik
        en = en.strip()
        tr = tr.strip()
        
        if len(en) < 2 or len(tr) < 2: continue
        
        c.execute("INSERT INTO sozluk_import_preview (en_term, tr_term) VALUES (?, ?)", (en, tr))
        count += 1

    conn.commit()
    conn.close()
    
    print(f"✅ Çıkarılan Terim Sayısı: {count}")
    print("\n🔍 ÖRNEK VERİLER (İlk 10):")
    
    # Örnek göster
    conn = sqlite3.connect(DB_PATH)
    c = conn.cursor()
    c.execute("SELECT en_term, tr_term FROM sozluk_import_preview LIMIT 10")
    for row in c.fetchall():
        print(f"EN: {row[0]:<30} | TR: {row[1]}")
    conn.close()

if __name__ == "__main__":
    if not os.path.exists(PDF_PATH):
        print(f"HATA: {PDF_PATH} bulunamadı.")
    else:
        extract_terms()
