#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script para verificar los resultados recién creados
"""

import odoo

def check_results(cr):
    """Verificar resultados de las pruebas LAB-2025-00034, 00035 y 00036"""
    env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
    
    print("🔍 Buscando las pruebas recién creadas...")
    
    # Buscar las pruebas por nombre
    test_names = ['LAB-2025-00034', 'LAB-2025-00035', 'LAB-2025-00036']
    tests = env['lims.test'].search([('name', 'in', test_names)])
    
    print(f"\n  Pruebas encontradas: {len(tests)}")
    
    for test in tests:
        print(f"\n📋 Prueba: {test.name}")
        print(f"   Análisis: {test.product_id.name}")
        print(f"   Resultados: {len(test.result_ids)}")
        
        for result in test.result_ids:
            print(f"\n   Resultado ID {result.id}:")
            print(f"     Parámetro: {result.parameter_id.name}")
            print(f"     Tipo: {result.parameter_value_type}")
            print(f"     value_numeric: {result.value_numeric}")
            print(f"     value_text: '{result.value_text}'")
            print(f"     value_selection: '{result.value_selection}'")
            print(f"     value_boolean: {result.value_boolean}")
            
            # Verificar si es problemático
            if result.parameter_value_type == 'selection':
                values_count = 0
                if result.value_numeric not in [False, 0.0]:
                    values_count += 1
                if result.value_text:
                    values_count += 1
                if result.value_selection:
                    values_count += 1
                if result.value_boolean:
                    values_count += 1
                
                if values_count > 1 or (values_count == 1 and not result.value_selection):
                    print(f"     ❌ PROBLEMÁTICO: {values_count} valores establecidos")
                    
                    # Intentar corregir
                    print("     🔧 Corrigiendo...")
                    try:
                        # Primero intentar con SQL directo para evitar validaciones
                        cr.execute("""
                            UPDATE lims_result
                            SET value_numeric = NULL,
                                value_text = NULL,
                                value_boolean = FALSE
                            WHERE id = %s
                        """, (result.id,))
                        print("     ✓ Corregido con SQL directo")
                    except Exception as e:
                        print(f"     ❌ Error al corregir: {e}")
    
    # Verificar si la orden S00029 sigue en estado sale
    order = env['sale.order'].search([('name', '=', 'S00029')], limit=1)
    if order:
        print(f"\n📊 Estado de la orden S00029: {order.state}")
        
        # Si está en sale, las muestras deberían estar generadas
        if order.state == 'sale':
            print(f"   Muestras generadas: {len(order.generated_sample_ids)}")
            for sample in order.generated_sample_ids:
                print(f"     - {sample.name}: {sample.sample_state}")

if __name__ == '__main__':
    db_name = 'lims_demo'
    try:
        registry = odoo.modules.registry.Registry(db_name)
        with registry.cursor() as cr:
            check_results(cr)
            cr.commit()
            print("\n✅ Cambios guardados exitosamente")
    except Exception as e:
        print(f"\n❌ Error: {e}")
        import traceback
        traceback.print_exc()