#!/usr/bin/env python3
"""
Gemini ile Resim→Resim Çeviri
Resim gönder, çevrilmiş resim al
"""

import fitz
import base64
import google.generativeai as genai
from PIL import Image
import io

# API Key
GEMINI_API_KEY = "AIzaSyCkYVKLxWDPNbQZr0-HM0nlSneEeM9KMjs"

PROMPT = """Bu teknik doküman sayfasını Türkçe'ye çevir.

GÖREV:
- Sayfadaki TÜM İngilizce metinleri Türkçe'ye çevir
- Sayfa yapısını, tabloları, çizgileri AYNEN koru
- Sadece metinleri değiştir, görsel yapıya DOKUNMA

ÇEVİRİ KURALLARI:
- engine = motor
- pump = pompa
- valve = valf
- brake = fren
- sensor = sensör
- controller = kontrol ünitesi
- min⁻¹ = dev/dk
- Hata kodları (111000, 111103) AYNEN KALSIN
- Referanslar (T2-2, T/M) AYNEN KALSIN

Çevrilmiş sayfayı RESİM OLARAK döndür."""


def pdf_page_to_image(pdf_path: str, page_num: int = 0, dpi: int = 200) -> bytes:
    """PDF sayfasını PNG'ye çevir"""
    doc = fitz.open(pdf_path)
    page = doc.load_page(page_num)
    
    mat = fitz.Matrix(dpi/72, dpi/72)
    pix = page.get_pixmap(matrix=mat)
    
    img_bytes = pix.tobytes("png")
    
    page_width = page.rect.width
    page_height = page.rect.height
    
    doc.close()
    
    return img_bytes, page_width, page_height


def translate_image_with_gemini(image_bytes: bytes):
    """Gemini ile resmi çevir - multimodal response dene"""
    
    genai.configure(api_key=GEMINI_API_KEY)
    
    # Farklı modelleri dene
    models_to_try = [
        'gemini-2.0-flash-exp',
        'gemini-exp-1206',
        'gemini-2.0-flash-thinking-exp-01-21'
    ]
    
    img_base64 = base64.b64encode(image_bytes).decode()
    
    for model_name in models_to_try:
        try:
            print(f"   Model deneniyor: {model_name}")
            model = genai.GenerativeModel(model_name)
            
            # Normal generate - resim çıktısı almayı dene
            response = model.generate_content([
                {"mime_type": "image/png", "data": img_base64},
                PROMPT + "\n\nÖNEMLİ: Çevrilmiş sayfayı görüntü/resim olarak oluştur ve döndür."
            ])
            
            # Response'u incele
            print(f"   Response alındı")
            
            if hasattr(response, 'candidates') and response.candidates:
                candidate = response.candidates[0]
                if hasattr(candidate, 'content') and candidate.content:
                    for part in candidate.content.parts:
                        # Inline data kontrolü (resim)
                        if hasattr(part, 'inline_data') and part.inline_data:
                            print("   ✓ Resim verisi bulundu!")
                            if hasattr(part.inline_data, 'data'):
                                return base64.b64decode(part.inline_data.data)
                            return part.inline_data.data
                        
                        # Text response
                        if hasattr(part, 'text') and part.text:
                            print(f"   Text: {part.text[:100]}...")
            
            # response._result kontrolü
            if hasattr(response, '_result'):
                result = response._result
                print(f"   _result keys: {result.keys() if hasattr(result, 'keys') else type(result)}")
            
        except Exception as e:
            print(f"   ⚠️ {model_name} hatası: {str(e)[:100]}")
            continue
    
    print("   ❌ Hiçbir model resim çıktısı veremedi")
    return None


def save_image_as_pdf(image_data: bytes, output_path: str, page_width: float, page_height: float):
    """Resmi PDF olarak kaydet"""
    
    # Bytes'ı PIL Image'a çevir
    img = Image.open(io.BytesIO(image_data))
    
    # PDF olarak kaydet
    img_rgb = img.convert('RGB')
    img_rgb.save(output_path, 'PDF', resolution=200)
    
    print(f"   PDF kaydedildi: {output_path}")


def main():
    input_pdf = "/var/www/html/PEPCVSON/public/katalog/api/output/ZW140-5B_sayfa_315.pdf"
    output_pdf = "/var/www/html/PEPCVSON/public/katalog/api/output/ZW140-5B_sayfa_315_IMG.pdf"
    output_png = "/var/www/html/PEPCVSON/public/katalog/api/output/ZW140-5B_sayfa_315_TR.png"
    
    print("📄 1/3 PDF görüntüye dönüştürülüyor...")
    img_bytes, page_width, page_height = pdf_page_to_image(input_pdf, 0, dpi=200)
    print(f"   Boyut: {len(img_bytes)} bytes")
    
    print("\n🤖 2/3 Gemini ile çeviri (resim→resim)...")
    translated_image = translate_image_with_gemini(img_bytes)
    
    if translated_image:
        print("\n💾 3/3 Kaydediliyor...")
        
        # PNG olarak kaydet
        with open(output_png, 'wb') as f:
            f.write(translated_image)
        print(f"   PNG: {output_png}")
        
        # PDF olarak kaydet
        save_image_as_pdf(translated_image, output_pdf, page_width, page_height)
        
        print(f"\n✅ Tamamlandı!")
        print(f"   PNG: {output_png}")
        print(f"   PDF: {output_pdf}")
    else:
        print("\n❌ Çeviri başarısız")


if __name__ == "__main__":
    main()

