#!/usr/bin/env python3
"""
Google Cloud Translation API - Glossary Kurulumu
1. GCS Bucket oluştur
2. Glossary CSV yükle
3. Glossary oluştur
4. Test et
"""
import os
import sqlite3
import csv
import io

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '/var/www/html/PEPCVSON/public/katalog/gen-lang-client-0706534257-f65a11f0150d.json'

from google.cloud import storage
from google.cloud import translate_v3 as translate

PROJECT_ID = 'gen-lang-client-0706534257'
LOCATION = 'us-central1'
BUCKET_NAME = f'{PROJECT_ID}-glossary'
GLOSSARY_ID = 'pepc-technical-terms'

def get_terms_from_db():
    """SQLite ve MySQL'den terimleri al"""
    terms = []
    
    # 1. SQLite dictionary.db
    db_path = '/var/www/html/PEPCVSON/dictionary.db'
    if os.path.exists(db_path):
        conn = sqlite3.connect(db_path)
        cursor = conn.cursor()
        
        # Tablo yapısını kontrol et
        cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
        tables = cursor.fetchall()
        print(f"SQLite tablolar: {tables}")
        
        # terms tablosundan al
        try:
            cursor.execute("SELECT english_term, turkish_term FROM terms WHERE english_term IS NOT NULL AND turkish_term IS NOT NULL")
            rows = cursor.fetchall()
            for row in rows:
                en, tr = row[0].strip(), row[1].strip()
                if en and tr and len(en) > 1 and len(tr) > 1:
                    terms.append((en, tr))
            print(f"SQLite'dan {len(rows)} terim alındı")
        except Exception as e:
            print(f"SQLite hata: {e}")
        
        conn.close()
    
    # 2. MySQL pepc_glossary (opsiyonel)
    try:
        import mysql.connector
        conn = mysql.connector.connect(
            host='localhost',
            user='root',
            password='Eu9Jeux0',
            database='pepc_db'
        )
        cursor = conn.cursor()
        cursor.execute("SELECT en_term, tr_term FROM pepc_glossary WHERE en_term IS NOT NULL AND tr_term IS NOT NULL")
        rows = cursor.fetchall()
        for row in rows:
            en, tr = row[0].strip(), row[1].strip()
            if en and tr and len(en) > 1 and len(tr) > 1:
                terms.append((en, tr))
        print(f"MySQL'den {len(rows)} terim alındı")
        conn.close()
    except Exception as e:
        print(f"MySQL bağlantı: {e}")
    
    # Duplicateleri kaldır
    unique_terms = list(set(terms))
    print(f"Toplam benzersiz terim: {len(unique_terms)}")
    
    return unique_terms

def create_glossary_csv(terms):
    """CSV formatında glossary oluştur"""
    output = io.StringIO()
    writer = csv.writer(output)
    
    # Header
    writer.writerow(['en', 'tr'])
    
    # Terms
    for en, tr in terms:
        # Temizlik
        en = en.replace('\n', ' ').replace('\r', '').strip()
        tr = tr.replace('\n', ' ').replace('\r', '').strip()
        
        # Boş veya çok uzun olanları atla
        if en and tr and len(en) <= 1024 and len(tr) <= 1024:
            writer.writerow([en, tr])
    
    return output.getvalue()

def setup_gcs_and_glossary():
    """GCS bucket ve glossary oluştur"""
    
    # 1. Terimleri al
    print("\n=== 1. TERİMLERİ TOPLAMA ===")
    terms = get_terms_from_db()
    
    if not terms:
        print("❌ Terim bulunamadı!")
        return
    
    # 2. CSV oluştur
    print("\n=== 2. CSV OLUŞTURMA ===")
    csv_content = create_glossary_csv(terms)
    csv_bytes = csv_content.encode('utf-8')
    print(f"CSV boyutu: {len(csv_bytes)} bytes")
    
    # Yerel kaydet (yedek)
    with open('/var/www/html/PEPCVSON/glossary_backup.csv', 'w', encoding='utf-8') as f:
        f.write(csv_content)
    print("Yedek kaydedildi: glossary_backup.csv")
    
    # 3. GCS Bucket oluştur
    print("\n=== 3. GCS BUCKET ===")
    storage_client = storage.Client()
    
    try:
        bucket = storage_client.get_bucket(BUCKET_NAME)
        print(f"Bucket zaten var: {BUCKET_NAME}")
    except:
        bucket = storage_client.create_bucket(BUCKET_NAME, location='us-central1')
        print(f"Bucket oluşturuldu: {BUCKET_NAME}")
    
    # 4. CSV'yi GCS'ye yükle
    print("\n=== 4. CSV YÜKLEME ===")
    blob = bucket.blob('glossary/pepc-terms.csv')
    blob.upload_from_string(csv_bytes, content_type='text/csv')
    gcs_uri = f'gs://{BUCKET_NAME}/glossary/pepc-terms.csv'
    print(f"Yüklendi: {gcs_uri}")
    
    # 5. Glossary oluştur
    print("\n=== 5. GLOSSARY OLUŞTURMA ===")
    translate_client = translate.TranslationServiceClient()
    parent = f'projects/{PROJECT_ID}/locations/{LOCATION}'
    glossary_name = f'{parent}/glossaries/{GLOSSARY_ID}'
    
    # Önce varsa sil
    try:
        translate_client.delete_glossary(name=glossary_name)
        print("Eski glossary silindi")
        import time
        time.sleep(5)
    except:
        pass
    
    # Yeni glossary oluştur
    glossary = translate.Glossary(
        name=glossary_name,
        language_pair=translate.Glossary.LanguageCodePair(
            source_language_code='en',
            target_language_code='tr'
        ),
        input_config=translate.GlossaryInputConfig(
            gcs_source=translate.GcsSource(
                input_uri=gcs_uri
            )
        )
    )
    
    operation = translate_client.create_glossary(parent=parent, glossary=glossary)
    print("Glossary oluşturuluyor... (bu biraz sürebilir)")
    
    result = operation.result(timeout=300)
    print(f"✅ Glossary oluşturuldu!")
    print(f"   İsim: {result.name}")
    print(f"   Terim sayısı: {result.entry_count}")
    
    return glossary_name

def test_with_glossary(glossary_name):
    """Glossary ile PDF çeviri testi"""
    print("\n=== 6. GLOSSARY İLE PDF ÇEVİRİ TESTİ ===")
    
    translate_client = translate.TranslationServiceClient()
    parent = f'projects/{PROJECT_ID}/locations/{LOCATION}'
    
    # PDF oku
    pdf_path = '/var/www/html/PEPCVSON/public/katalog/api/output/ZW140-5B_sayfa_315.pdf'
    with open(pdf_path, 'rb') as f:
        pdf_content = f.read()
    
    print(f"PDF boyutu: {len(pdf_content)} bytes")
    
    # Glossary config
    glossary_config = translate.TranslateTextGlossaryConfig(
        glossary=glossary_name
    )
    
    # Document translation request
    request = translate.TranslateDocumentRequest(
        parent=parent,
        source_language_code='en',
        target_language_code='tr',
        document_input_config=translate.DocumentInputConfig(
            content=pdf_content,
            mime_type='application/pdf'
        ),
        glossary_config=glossary_config
    )
    
    print("Çeviri yapılıyor...")
    response = translate_client.translate_document(request=request)
    
    # Kaydet
    output_path = '/var/www/html/PEPCVSON/public/katalog/api/output/ZW140-5B_GOOGLE_GLOSSARY.pdf'
    with open(output_path, 'wb') as f:
        f.write(response.document_translation.byte_stream_outputs[0])
    
    print(f"✅ Kaydedildi: {output_path}")
    print(f"URL: https://yedekparcaservis.com.tr/katalog/api/output/ZW140-5B_GOOGLE_GLOSSARY.pdf")

if __name__ == '__main__':
    glossary_name = setup_gcs_and_glossary()
    if glossary_name:
        test_with_glossary(glossary_name)

