#!/usr/bin/env python3
"""
sync_cache_export.py
==========================
Risincronizza inv_cache_export GLOBALMENTE (senza sede).

Una riga per prodotto:
- id_prodotto, id_tenant, codice_barcode
- descrizione, categoria
- prezzo_pubblico (PRIMO del JSON, non per sede!)
- costo (PRIMO del JSON)

Eseguire: python3 sync_cache_export.py
"""

import json
import pymysql
import logging

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

DB_CONFIG = {
    'host': 'localhost',
    'user': 'enigma_user',
    'password': 'arcana2026',
    'database': 'enigma',
    'charset': 'utf8mb4'
}


def sync_cache_export_global():
    """Risincronizza inv_cache_export GLOBALE."""
    
    conn = pymysql.connect(**DB_CONFIG, cursorclass=pymysql.cursors.DictCursor)
    cursor = conn.cursor()
    
    try:
        # Pulisci la tabella
        logger.info("Pulizia inv_cache_export...")
        cursor.execute("TRUNCATE TABLE inv_cache_export")
        
        logger.info("Lettura inv_cache_prodotti...")
        cursor.execute("""
            SELECT id, codice_barcode, dati_cassanova, id_tenant 
            FROM inv_cache_prodotti
        """)
        
        cache_products = cursor.fetchall()
        logger.info(f"Letti {len(cache_products)} prodotti")
        
        rows_processed = 0
        rows_skipped = 0
        
        for product in cache_products:
            codice_barcode = product['codice_barcode']
            # Rimuovi prefisso NO_BARCODE_ per coerenza con lo scanner
            if codice_barcode.startswith('NO_BARCODE_'):
                codice_barcode = codice_barcode[len('NO_BARCODE_'):]
            id_tenant = product['id_tenant']
            
            try:
                dati = json.loads(product['dati_cassanova'])
                id_prodotto = dati.get('id')
                
                if not id_prodotto:
                    rows_skipped += 1
                    continue
                
                descrizione = dati.get('description', '')
                categoria = dati.get('category', {}).get('description', '')
                
                # PRIMO prezzo (globale, non per sede)
                prezzi = dati.get('prices', [])
                prezzo_pubblico = 0
                if prezzi and len(prezzi) > 0:
                    prezzo_pubblico = float(prezzi[0].get('value', 0))
                
                # PRIMO costo (globale)
                costs = dati.get('costs', [])
                costo = 0
                if costs and len(costs) > 0:
                    costo = float(costs[0].get('cost', 0))
                
                # INSERT globale (SENZA id_sede!)
                cursor.execute("""
                    INSERT INTO inv_cache_export
                    (id_prodotto, id_tenant, id_sede, codice_barcode, descrizione, categoria, prezzo_pubblico, costo)
                    VALUES (%s, %s, 0, %s, %s, %s, %s, %s)
                    ON DUPLICATE KEY UPDATE
                        codice_barcode = VALUES(codice_barcode),
                        descrizione = VALUES(descrizione),
                        categoria = VALUES(categoria),
                        prezzo_pubblico = VALUES(prezzo_pubblico),
                        costo = VALUES(costo),
                        updated_at = NOW()
                """, (id_prodotto, id_tenant, codice_barcode, descrizione, categoria, prezzo_pubblico, costo))
                
                rows_processed += 1
            
            except json.JSONDecodeError:
                logger.warning(f"Errore JSON {codice_barcode}")
                rows_skipped += 1
            except Exception as e:
                logger.error(f"Errore {codice_barcode}: {e}")
                rows_skipped += 1
        
        conn.commit()
        
        cursor.execute("""
            SELECT COUNT(*) as tot, COUNT(DISTINCT id_prodotto) as prodotti
            FROM inv_cache_export
        """)
        
        stats = cursor.fetchone()
        
        logger.info("")
        logger.info("=" * 60)
        logger.info("✨ RISINCRONIZZAZIONE GLOBALE COMPLETATA")
        logger.info("=" * 60)
        logger.info(f"Righe: {stats['tot']}")
        logger.info(f"Prodotti unici: {stats['prodotti']}")
        logger.info(f"Processati: {rows_processed}")
        logger.info(f"Saltati: {rows_skipped}")
        logger.info("")
        
    except Exception as e:
        logger.error(f"Errore: {e}")
        import traceback
        traceback.print_exc()
    finally:
        cursor.close()
        conn.close()


if __name__ == '__main__':
    sync_cache_export_global()
