#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script para verificar los datos de demostración cargados.
"""

import odoo
import json

def verify_demo_data(cr):
    """Verificar datos de demostración"""
    
    # Verificar parámetros
    cr.execute("""
        SELECT COUNT(*) as total,
               COUNT(DISTINCT value_type) as tipos
        FROM lims_analysis_parameter
    """)
    params = cr.fetchone()
    
    # Verificar rangos
    cr.execute("""
        SELECT COUNT(*) as total,
               COUNT(DISTINCT parameter_id) as parametros_con_rangos
        FROM lims_parameter_range
    """)
    ranges = cr.fetchone()
    
    # Verificar configuración de parámetros en análisis
    cr.execute("""
        SELECT pt.name as analisis,
               COUNT(ptp.id) as parametros_configurados
        FROM product_template pt
        LEFT JOIN product_template_parameter ptp ON ptp.product_tmpl_id = pt.id
        WHERE pt.is_analysis = true
        GROUP BY pt.id, pt.name
        ORDER BY pt.name
    """)
    analysis_config = cr.fetchall()
    
    # Verificar órdenes de laboratorio
    cr.execute("""
        SELECT COUNT(*) as total_ordenes,
               COUNT(DISTINCT partner_id) as pacientes_distintos,
               COUNT(CASE WHEN state = 'sale' THEN 1 END) as confirmadas
        FROM sale_order
        WHERE is_lab_request = true
    """)
    orders = cr.fetchone()
    
    # Verificar muestras
    cr.execute("""
        SELECT COUNT(*) as total_muestras,
               COUNT(DISTINCT sample_state) as estados_distintos
        FROM stock_lot
        WHERE is_lab_sample = true
    """)
    samples = cr.fetchone()
    
    # Verificar pruebas
    cr.execute("""
        SELECT COUNT(*) as total_pruebas,
               COUNT(CASE WHEN state = 'validated' THEN 1 END) as validadas,
               COUNT(CASE WHEN state = 'result_entered' THEN 1 END) as con_resultados
        FROM lims_test
    """)
    tests = cr.fetchone()
    
    # Verificar resultados
    cr.execute("""
        SELECT COUNT(*) as total_resultados,
               COUNT(CASE WHEN is_out_of_range = true THEN 1 END) as fuera_rango,
               COUNT(CASE WHEN is_critical = true THEN 1 END) as criticos
        FROM lims_result
    """)
    results = cr.fetchone()
    
    return {
        'parametros': {
            'total': params[0],
            'tipos_distintos': params[1]
        },
        'rangos': {
            'total': ranges[0],
            'parametros_con_rangos': ranges[1]
        },
        'analisis_configurados': [
            {'analisis': row[0], 'parametros': row[1]} 
            for row in analysis_config
        ],
        'ordenes': {
            'total': orders[0],
            'pacientes_distintos': orders[1],
            'confirmadas': orders[2]
        },
        'muestras': {
            'total': samples[0],
            'estados_distintos': samples[1]
        },
        'pruebas': {
            'total': tests[0],
            'validadas': tests[1],
            'con_resultados': tests[2]
        },
        'resultados': {
            'total': results[0],
            'fuera_rango': results[1],
            'criticos': results[2]
        }
    }


if __name__ == '__main__':
    import sys
    sys.path.insert(0, '/usr/lib/python3/dist-packages')
    
    db_name = 'lims_demo'
    registry = odoo.registry(db_name)
    
    with registry.cursor() as cr:
        data = verify_demo_data(cr)
        
        print("\n" + "="*60)
        print("VERIFICACIÓN DE DATOS DE DEMOSTRACIÓN")
        print("="*60)
        
        print(f"\n📊 PARÁMETROS DE ANÁLISIS:")
        print(f"   - Total: {data['parametros']['total']}")
        print(f"   - Tipos distintos: {data['parametros']['tipos_distintos']}")
        
        print(f"\n📏 RANGOS DE REFERENCIA:")
        print(f"   - Total: {data['rangos']['total']}")
        print(f"   - Parámetros con rangos: {data['rangos']['parametros_con_rangos']}")
        
        print(f"\n🧪 ANÁLISIS CONFIGURADOS:")
        for item in data['analisis_configurados']:
            if item['parametros'] > 0:
                print(f"   - {item['analisis']}: {item['parametros']} parámetros")
        
        print(f"\n📋 ÓRDENES DE LABORATORIO:")
        print(f"   - Total: {data['ordenes']['total']}")
        print(f"   - Pacientes distintos: {data['ordenes']['pacientes_distintos']}")
        print(f"   - Confirmadas: {data['ordenes']['confirmadas']}")
        
        print(f"\n🧪 MUESTRAS:")
        print(f"   - Total: {data['muestras']['total']}")
        print(f"   - Estados distintos: {data['muestras']['estados_distintos']}")
        
        print(f"\n🔬 PRUEBAS:")
        print(f"   - Total: {data['pruebas']['total']}")
        print(f"   - Validadas: {data['pruebas']['validadas']}")
        print(f"   - Con resultados: {data['pruebas']['con_resultados']}")
        
        print(f"\n📊 RESULTADOS:")
        print(f"   - Total: {data['resultados']['total']}")
        print(f"   - Fuera de rango: {data['resultados']['fuera_rango']}")
        print(f"   - Críticos: {data['resultados']['criticos']}")
        
        print("\n" + "="*60)