#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script para encontrar y corregir resultados problemáticos
"""

import odoo

def find_problematic_results(cr):
    """Encontrar resultados con múltiples valores"""
    env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
    
    print("🔍 Buscando resultados problemáticos...")
    
    # Buscar todos los resultados de tipo selección
    results = env['lims.result'].search([
        ('parameter_value_type', '=', 'selection')
    ])
    
    print(f"\n  Total de resultados de selección: {len(results)}")
    
    problematic_count = 0
    for result in results:
        # Contar cuántos campos de valor están establecidos
        values_set = []
        
        if result.value_numeric not in [False, 0.0]:
            values_set.append(f"numeric={result.value_numeric}")
        if result.value_text:
            values_set.append(f"text='{result.value_text}'")
        if result.value_selection:
            values_set.append(f"selection='{result.value_selection}'")
        if result.value_boolean:
            values_set.append(f"boolean={result.value_boolean}")
        
        if len(values_set) > 1 or (len(values_set) == 1 and 'selection' not in values_set[0]):
            problematic_count += 1
            print(f"\n  ❌ Resultado problemático ID {result.id}:")
            print(f"     Prueba: {result.test_id.name}")
            print(f"     Parámetro: {result.parameter_id.name}")
            print(f"     Valores establecidos: {', '.join(values_set)}")
            
            # Corregir: limpiar todos los valores excepto selection
            print("     🔧 Corrigiendo...")
            result.with_context(skip_validation=True).write({
                'value_numeric': False,
                'value_text': False,
                'value_boolean': False,
                # No tocar value_selection por ahora
            })
            print("     ✓ Corregido")
    
    if problematic_count == 0:
        print("\n✅ No se encontraron resultados problemáticos")
    else:
        print(f"\n📊 Resumen: {problematic_count} resultados corregidos")
        
    # Buscar la orden S00029 para verificar su estado
    print("\n🔍 Verificando orden S00029...")
    order = env['sale.order'].search([('name', '=', 'S00029')], limit=1)
    if order:
        print(f"  Estado actual: {order.state}")
        
        if order.state == 'draft':
            print("\n🔄 Intentando confirmar S00029...")
            try:
                order.action_confirm()
                print("✅ ¡Orden confirmada exitosamente!")
                print(f"  Nuevo estado: {order.state}")
                
                # Buscar las pruebas generadas
                tests = env['lims.test'].search([
                    ('sale_order_line_id.order_id', '=', order.id)
                ])
                print(f"  Pruebas generadas: {len(tests)}")
                for test in tests:
                    print(f"    - {test.name}: {test.product_id.name}")
                    
            except Exception as e:
                print(f"❌ Error al confirmar: {str(e)}")
        else:
            print("  La orden ya está confirmada")

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