#!/usr/bin/env python3
"""
PDF Katalog Oluşturucu
======================
Tüm PDF dosyalarını tarayıp JSON katalog oluşturur.

Kullanım:
    python3 build_pdf_catalog.py
    
Çıktı:
    pdf_catalog.json - Marka/Model/PDF yapısı
"""

import os
import json
from collections import defaultdict
from datetime import datetime

PDF_BASE = "/mnt/pdfs"
OUTPUT_FILE = "/var/www/html/PEPCVSON/pdf_catalog.json"

def get_pdf_type(filename):
    """PDF tipini belirle"""
    name_lower = filename.lower()
    if 'parça' in name_lower or 'parts' in name_lower or 'katalog' in name_lower:
        return 'parts'
    elif 'tamir' in name_lower or 'servis' in name_lower or 'service' in name_lower or 'repair' in name_lower:
        return 'repair'
    elif 'operatör' in name_lower or 'operator' in name_lower:
        return 'operator'
    return 'manual'

def scan_pdfs():
    """Tüm PDF'leri tara ve katalog oluştur"""
    
    catalog = {
        "generated_at": datetime.now().isoformat(),
        "base_path": PDF_BASE,
        "brands": {}
    }
    
    total_pdfs = 0
    total_brands = 0
    total_models = 0
    
    # Ana dizini tara
    for root, dirs, files in os.walk(PDF_BASE):
        # Sadece PDF dosyaları
        pdf_files = [f for f in files if f.lower().endswith('.pdf')]
        
        if not pdf_files:
            continue
        
        # Yolu parçala: /mnt/pdfs/GRUP/MARKA/TIP/MODEL/dosya.pdf
        rel_path = os.path.relpath(root, PDF_BASE)
        parts = rel_path.split(os.sep)
        
        # En az Group/Brand olmalı
        if len(parts) < 2:
            continue
        
        # Marka Tespiti (2. seviye: İŞ MAKİNASI/BOMAG -> BOMAG)
        brand = parts[1].upper()
        
        # Model Tespiti: PDF'in bulunduğu klasörün adı MODEL'dir.
        # Örn: .../CATERPILLAR/JENERATOR/3406C/x.pdf -> Model '3406C' olmalı
        # Örn: .../BOMAG/BW 151/x.pdf -> Model 'BW 151' olmalı
        # Ancak, eğer PDF doğrudan Marka klasöründeyse, Model 'GENEL' olur.
        
        parent_folder = os.path.basename(root)
        
        if parent_folder.upper() == brand:
             model = "GENEL"
        else:
             model = parent_folder.upper()
             
        # Bazı gereksiz klasör adlarını temizle (örn: 'MANUAL', 'PDFS' vs)
        if model in ['MANUAL', 'PDF', 'DOCS']:
             model = "GENEL"
        
        # Kataloga ekle
        if brand not in catalog["brands"]:
            catalog["brands"][brand] = {"models": {}}
            total_brands += 1
        
        if model not in catalog["brands"][brand]["models"]:
            catalog["brands"][brand]["models"][model] = {"pdfs": []}
            total_models += 1
        
        # PDF'leri ekle
        for pdf_file in pdf_files:
            full_path = os.path.join(root, pdf_file)
            try:
                size_mb = os.path.getsize(full_path) / (1024 * 1024)
            except:
                size_mb = 0
            
            pdf_info = {
                "filename": pdf_file,
                "path": full_path,
                "type": get_pdf_type(pdf_file),
                "size_mb": round(size_mb, 1)
            }
            
            catalog["brands"][brand]["models"][model]["pdfs"].append(pdf_info)
            total_pdfs += 1
    
    # İstatistikler
    catalog["stats"] = {
        "total_brands": total_brands,
        "total_models": total_models,
        "total_pdfs": total_pdfs
    }
    
    return catalog

def main():
    print("🔍 PDF'ler taranıyor...")
    print(f"   Kaynak: {PDF_BASE}")
    
    catalog = scan_pdfs()
    
    # JSON'a yaz
    with open(OUTPUT_FILE, 'w', encoding='utf-8') as f:
        json.dump(catalog, f, ensure_ascii=False, indent=2)
    
    print(f"\n✅ Katalog oluşturuldu: {OUTPUT_FILE}")
    print(f"   📊 {catalog['stats']['total_brands']} marka")
    print(f"   📊 {catalog['stats']['total_models']} model")
    print(f"   📊 {catalog['stats']['total_pdfs']} PDF")
    
    # Örnek çıktı
    print("\n📋 Örnek (ilk 3 marka):")
    for i, (brand, data) in enumerate(list(catalog["brands"].items())[:3]):
        models = list(data["models"].keys())[:3]
        print(f"   {brand}: {len(data['models'])} model - {models}...")

if __name__ == "__main__":
    main()

