import base64
import os
import sys

try:
    # El script se ejecuta dentro del shell de Odoo
    print("Iniciando actualización de logo para Odoo 18...")
    
    # Buscar TODAS las empresas
    companies = env['res.company'].search([])
    print(f"Empresas encontradas: {len(companies)}")
    
    # Leer el archivo de logo
    logo_path = '/mnt/extra-addons/lims_management/static/img/lab_logo.png'
    if not os.path.exists(logo_path):
        print(f"ERROR: No se encontró el archivo de logo en: {logo_path}")
        sys.exit(1)
    
    print(f"Archivo de logo encontrado en: {logo_path}")
    
    # Leer y codificar la imagen
    with open(logo_path, 'rb') as logo_file:
        logo_data = logo_file.read()
        logo_base64 = base64.b64encode(logo_data)  # No decodificar a string
    
    print(f"Logo leído correctamente, tamaño: {len(logo_data)} bytes")
    
    # Actualizar las empresas
    for idx, company in enumerate(companies):
        print(f"\nActualizando empresa ID {company.id}: {company.name}")
        
        # Generar nombre único para cada empresa
        if idx == 0:
            new_name = 'Laboratorio Clínico LIMS'
        else:
            new_name = f'Laboratorio Clínico LIMS - Sucursal {idx}'
        
        try:
            # En Odoo 18, actualizar por separado para evitar problemas
            # Primero el nombre
            company.name = new_name
            env.cr.commit()
            print(f"Nombre actualizado: {new_name}")
            
            # Luego el logo usando sudo para evitar problemas de permisos
            company.sudo().write({
                'logo': logo_base64,
            })
            env.cr.commit()
            print(f"Logo actualizado para la empresa ID {company.id}")
            
            # También actualizar el partner asociado
            if company.partner_id:
                company.partner_id.name = new_name
                company.partner_id.sudo().write({
                    'image_1920': logo_base64,
                })
                env.cr.commit()
                print(f"Partner actualizado (ID: {company.partner_id.id})")
                
        except Exception as e:
            print(f"Error al actualizar empresa ID {company.id}: {str(e)}")
            env.cr.rollback()
            continue
    
    # Verificación final con consulta directa a la BD
    print("\n" + "="*60)
    print("VERIFICACIÓN FINAL (consulta directa):")
    print("="*60)
    
    env.cr.execute("""
        SELECT id, name, 
               CASE WHEN logo IS NOT NULL THEN 'SI' ELSE 'NO' END as tiene_logo,
               CASE WHEN logo IS NOT NULL THEN length(logo) ELSE 0 END as logo_size
        FROM res_company
        ORDER BY id
    """)
    
    for row in env.cr.fetchall():
        print(f"\nEmpresa ID {row[0]}:")
        print(f"  - Nombre: {row[1]}")
        print(f"  - Logo presente: {row[2]}")
        if row[2] == 'SI':
            print(f"  - Tamaño del logo (base64): {row[3]:,} caracteres")
    
    # Forzar actualización de caché
    env['res.company'].invalidate_cache()
    
    print("\nLogo de la empresa actualizado exitosamente.")
    print("NOTA: Si el logo no aparece en la interfaz, puede ser necesario:")
    print("  1. Limpiar la caché del navegador (Ctrl+F5)")
    print("  2. Reiniciar el servicio de Odoo")
    
except Exception as e:
    print(f"ERROR al actualizar el logo: {str(e)}")
    import traceback
    traceback.print_exc()
    sys.exit(1)