import sqlite3
import re

DB_PATH = '/mnt/pdfs/dictionary_v2.db'

def clean_symbols():
    conn = sqlite3.connect(DB_PATH)
    conn.row_factory = sqlite3.Row
    c = conn.cursor()
    
    # Tüm verileri çek
    c.execute("SELECT term_id, canonical_tr, canonical_en FROM technical_terms")
    rows = c.fetchall()
    
    # İzin verilen karakter seti:
    # - a-z, A-Z (İngilizce harfler)
    # - çğıöşüÇĞİÖŞÜ (Türkçe harfler)
    # - Boşluk (\s)
    # - Tire (-) (Bunu genelde korumak isteriz ama 'anlamsız' dendiği için
    #   ve user 'harf dışında' dediği için, parantez, nokta, virgülden vs kurtulmak istiyoruz.
    #   Tire teknik terimlerde (o-ring) çok kritik, onu koruyalım.
    #   Apostrof (') ? user's vs users. Genelde teknik sözlükte apostrof istenmez.
    
    # Regex: Sadece harf, boşluk ve tireye izin ver.
    # ^[a-zA-ZçğıöşüÇĞİÖŞÜ\s\-]+$
    
    allowed_pattern = re.compile(r'^[a-zA-ZçğıöşüÇĞİÖŞÜ\s\-]+$')
    
    ids_to_delete = []
    examples = []
    
    print(f"Toplam {len(rows)} kayıt inceleniyor...")
    
    for row in rows:
        tr = row['canonical_tr']
        en = row['canonical_en']
        
        # None kontrolü
        if not tr or not en:
            ids_to_delete.append(row['term_id'])
            continue
            
        # Regex kontrolü
        if not allowed_pattern.match(tr) or not allowed_pattern.match(en):
            ids_to_delete.append(row['term_id'])
            if len(examples) < 10:
                examples.append(f"{tr} <-> {en}")

    if not ids_to_delete:
        print("Silinecek 'anlamsız karakterli' kayıt bulunamadı.")
        return

    print(f"\n🗑️ Toplam {len(ids_to_delete)} kayıt silinecek.")
    print("Örnek Silinecekler:")
    for ex in examples:
        print(f" - {ex}")
        
    # Silme işlemi
    # SQLite limit sorunu olmaması için chunk chunk silelim (gerçi list comprehension ile IN clause yaparız ama çok büyürse executemany daha iyi)
    
    c.executemany("DELETE FROM technical_terms WHERE term_id = ?", [(i,) for i in ids_to_delete])
    
    conn.commit()
    
    # Defrag
    c.execute("VACUUM")
    
    conn.close()
    print("\n✅ Temizlik tamamlandı.")

if __name__ == "__main__":
    clean_symbols()
