#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Glossary DB'ye temiz TR/EN cümle çiftlerini ekle
"""

import fitz
import re
import pymysql

# PDF yolu
PDF_PATH = "/var/www/html/PEPCVSON/460165955-HMK-102B-ALPHA-PERKINS-TR3-TURNER-ZF-B060H-pdf (1).pdf"

# DB bağlantısı
DB_CONFIG = {
    'host': 'localhost',
    'user': 'admin',
    'password': 'Hopd147258369++',
    'database': 'pepc_glossary',
    'charset': 'utf8mb4'
}

def clean_term(text):
    """Terimi temizle"""
    text = text.strip()
    text = re.sub(r'\s+', ' ', text)
    # Başındaki parça kodunu kaldır
    text = re.sub(r'^[A-Z]\d{3}\.\d{2}\.\d{2}\s*', '', text)
    # Seri numarasını kaldır
    text = re.sub(r'^[A-Z]\d{5,}\s*-?\s*', '', text)
    return text.strip()

def is_valid_pair(tr, en):
    """Geçerli çift mi kontrol et"""
    # Çok kısa
    if len(tr) < 4 or len(en) < 4:
        return False
    
    # Sadece kod
    if re.match(r'^[A-Z]\d{3}\.\d{2}\.\d{2}$', tr):
        return False
    if re.match(r'^[A-Z]\d{3}\.\d{2}\.\d{2}$', en):
        return False
    
    # Başlıklar
    skip_terms = [
        'İÇİNDEKİLER / CONTENTS', 'Sayfa No', 'Page No', 
        'Sayfa Adı', 'Page Name', 'Revizyon', 'Revision',
        'ÖNSÖZ', 'PREFACE', 'KISALTMALAR', 'ABBREVATIONS'
    ]
    for skip in skip_terms:
        if skip in tr or skip in en:
            return False
    
    # Tek harf
    if re.match(r'^[A-Z]$', tr) or re.match(r'^[A-Z]$', en):
        return False
    
    # Türkçe'de Türkçe karakter olmalı veya teknik terim olmalı
    has_turkish = bool(re.search(r'[ÇĞİÖŞÜçğıöşü]', tr))
    has_tech_tr = bool(re.search(r'(SİSTEMİ|MONTAJI|KOMPLESİ|SİLİNDİRİ|VALFİ|POMPASI|GRUBU|TAKIMI)', tr))
    
    # İngilizce'de İngilizce kelime olmalı
    has_english = bool(re.search(r'\b(SYSTEM|MOUNTING|ASSEMBLY|CYLINDER|VALVE|PUMP|GROUP|KIT|ENGINE|HYDRAULIC|BRAKE|STEERING|AXLE|TRANSMISSION|LOADER|BACKHOE|BUCKET|ARM|BOOM|CONTROL|PIPING)\b', en, re.IGNORECASE))
    
    return (has_turkish or has_tech_tr) and has_english

def extract_pairs_from_pdf():
    """PDF'den temiz TR/EN çiftlerini çıkar"""
    doc = fitz.open(PDF_PATH)
    pairs = []
    
    # Sayfa 7-18 (index 6-17) - İçindekiler
    for page_num in range(6, 18):
        page = doc[page_num]
        text = page.get_text("text")
        lines = [l.strip() for l in text.split('\n') if l.strip()]
        
        i = 0
        while i < len(lines) - 1:
            line1 = clean_term(lines[i])
            line2 = clean_term(lines[i + 1])
            
            if not line1 or not line2:
                i += 1
                continue
            
            # Türkçe + İngilizce pattern
            if is_valid_pair(line1, line2):
                pairs.append((line1.upper(), line2.upper()))
                i += 2
            else:
                i += 1
    
    doc.close()
    
    # Tekrarları kaldır ve sırala
    unique_pairs = list(set(pairs))
    unique_pairs.sort(key=lambda x: x[0])
    
    return unique_pairs

def get_category(tr_term):
    """Terime göre kategori belirle"""
    categories = {
        'MOTOR': ['MOTOR', 'ENGINE', 'YAKIT', 'FUEL', 'EGSOZ', 'EXHAUST', 'RADYATÖR', 'SOĞUTMA'],
        'HİDROLİK': ['HİDROLİK', 'HYDRAULIC', 'SİLİNDİR', 'CYLINDER', 'VALF', 'VALVE', 'POMPA', 'PUMP'],
        'ŞANZIMAN': ['ŞANZIMAN', 'TRANSMISSION', 'KAVRAMA', 'CLUTCH', 'KONVERTÖR'],
        'AKS': ['AKS', 'AXLE', 'DİFERANSİYEL', 'DIFFERENTIAL', 'PLANET'],
        'FREN': ['FREN', 'BRAKE'],
        'DİREKSİYON': ['DİREKSİYON', 'STEERING'],
        'ATAÇMAN': ['KEPÇE', 'BUCKET', 'YÜKLEYİCİ', 'LOADER', 'KAZICI', 'BACKHOE', 'KIRICI', 'BREAKER', 'RİPER', 'RIPPER'],
        'KABİN': ['KABİN', 'CAB', 'KOLTUK', 'SEAT', 'KONSOL', 'CONSOLE', 'CAM', 'WINDOW'],
        'ELEKTRİK': ['ELEKTRİK', 'ELECTRIC', 'KABLO', 'CABLE', 'LAMBA', 'LAMP'],
    }
    
    for cat, keywords in categories.items():
        for kw in keywords:
            if kw in tr_term.upper():
                return cat
    return 'GENEL'

def insert_to_db(pairs):
    """Çiftleri veritabanına ekle"""
    conn = pymysql.connect(**DB_CONFIG)
    cursor = conn.cursor()
    
    # Önce tabloyu temizle
    cursor.execute("TRUNCATE TABLE terms")
    
    inserted = 0
    for tr, en in pairs:
        category = get_category(tr)
        try:
            cursor.execute("""
                INSERT INTO terms (tr_term, en_term, category, source)
                VALUES (%s, %s, %s, %s)
            """, (tr, en, category, 'HMK-102B-ALPHA'))
            inserted += 1
        except pymysql.err.IntegrityError:
            # Duplicate, skip
            pass
    
    conn.commit()
    cursor.close()
    conn.close()
    
    return inserted

def insert_abbreviations():
    """Kısaltmaları ekle"""
    abbreviations = [
        ('&', 'VE', 'AND'),
        ('A/C', None, 'AIR CONDITIONER'),
        ('A.K.V.', 'ANA KUMANDA VALFİ', 'MAIN CONTROL VALVE'),
        ('AM', None, 'ARM'),
        ('AR', None, 'AS REQUIRED'),
        ("ASS'Y", None, 'ASSEMBLY'),
        ('BKT', None, 'BUCKET'),
        ('BM', None, 'BOOM'),
        ('BG', 'BULGARCA', None),
        ('FR', 'FRANSIZCA', None),
        ('HYD.', None, 'HYDRAULIC'),
        ('ISP', 'İSPANYOLCA', None),
        ('İNG', 'İNGİLİZCE', None),
        ('JY', 'JOYSTICK', 'JOYSTICK'),
        ('K', 'KİT', 'KIT'),
        ('K.M.', 'KAYNAKLI MONTAJ', None),
        ('K.K.', 'KOMPLE', 'COMPLETE'),
        ('LH', None, 'LEFT HAND'),
        ('LR', None, 'LONG REACH'),
        ('LV', 'LEVYELİ', 'LEVERS'),
        ('M.C.V.', None, 'MAIN CONTROL VALVE'),
        ('OP', 'OPSİYONEL', 'OPTIONAL'),
        ('PORT', 'PORTEKİZCE', None),
        ('REV.', 'REVİZYON', 'REVISION'),
        ('RH', None, 'RIGHT HAND'),
        ('RUS', 'RUSÇA', None),
        ('S', 'SET', 'SET'),
        ('STD', 'STANDART', 'STANDARD'),
        ('SW', None, 'SWING'),
        ('TR', 'TÜRKÇE', None),
        ('TRV', None, 'TRAVEL'),
        ('W.A.', None, 'WELDING ASSEMBLY'),
    ]
    
    conn = pymysql.connect(**DB_CONFIG)
    cursor = conn.cursor()
    
    cursor.execute("TRUNCATE TABLE abbreviations")
    
    for abbr, tr, en in abbreviations:
        cursor.execute("""
            INSERT INTO abbreviations (abbr, tr_meaning, en_meaning)
            VALUES (%s, %s, %s)
        """, (abbr, tr, en))
    
    conn.commit()
    cursor.close()
    conn.close()
    
    return len(abbreviations)

def main():
    print("=" * 60)
    print("📚 GLOSSARY VERITABANI DOLDURMA")
    print("=" * 60)
    
    # PDF'den çıkar
    print("\n📄 PDF'den terimler çıkarılıyor...")
    pairs = extract_pairs_from_pdf()
    print(f"   ✅ {len(pairs)} benzersiz terim çifti bulundu")
    
    # Örnek göster
    print("\n📝 Örnek terimler:")
    for tr, en in pairs[:10]:
        print(f"   {tr} → {en}")
    
    # DB'ye ekle
    print("\n💾 Veritabanına ekleniyor...")
    inserted = insert_to_db(pairs)
    print(f"   ✅ {inserted} terim eklendi")
    
    # Kısaltmaları ekle
    print("\n📋 Kısaltmalar ekleniyor...")
    abbr_count = insert_abbreviations()
    print(f"   ✅ {abbr_count} kısaltma eklendi")
    
    print("\n" + "=" * 60)
    print("✅ İŞLEM TAMAMLANDI!")
    print("=" * 60)

if __name__ == "__main__":
    main()

