<?php
/**
 * API: Buscar productos en la base de datos por nombre
 * GET: ?query=termino
 */
header('Content-Type: application/json; charset=utf-8');

require_once __DIR__ . '/../config/db.php';

try {
    $query = isset($_GET['query']) ? trim($_GET['query']) : '';

    if (strlen($query) < 3) {
        echo json_encode(['success' => true, 'data' => []]);
        exit;
    }

    $pdo = getConnection();
    
    // Búsqueda inteligente: buscamos por palabras y calculamos relevancia
    $words = array_filter(explode(' ', $query), function($w) { 
        return strlen($w) >= 2; 
    });

    if (empty($words)) {
        echo json_encode(['success' => true, 'data' => []]);
        exit;
    }

    $selectScore = [];
    $whereTerms = [];
    $params = [];
    
    foreach (array_values($words) as $word) {
        $val = '%' . $word . '%';
        // Cada palabra se usa 8 veces en la consulta (4 en score, 4 en where)
        for ($i = 0; $i < 8; $i++) {
            $params[] = $val;
        }
        
        $selectScore[] = "(CASE WHEN p.NombreComercial LIKE ? THEN 10 ELSE 0 END + CASE WHEN p.NombreGenerico LIKE ? THEN 5 ELSE 0 END + CASE WHEN p.CodigoBarra LIKE ? THEN 20 ELSE 0 END + CASE WHEN p.CodigoInterno LIKE ? THEN 30 ELSE 0 END)";
        $whereTerms[] = "(p.NombreComercial LIKE ? OR p.NombreGenerico LIKE ? OR p.CodigoBarra LIKE ? OR p.CodigoInterno LIKE ?)";
    }

    $scoreSql = implode(' + ', $selectScore);
    $whereSql = implode(' OR ', $whereTerms);

    $sql = "SELECT 
                p.id, 
                p.CodigoInterno, 
                p.CodigoBarra, 
                p.NombreComercial, 
                p.NombreGenerico, 
                p.laboratorio, 
                (SELECT MAX(pp.fecha_actualizacion) FROM producto_presentaciones pp WHERE pp.producto_id = p.id) as fecha_mapeo,
                COALESCE(pcp.costo_promedio_unidad_base, 0) as CostoUnidad,
                ROUND(COALESCE(pcp.costo_promedio_unidad_base, 0) * COALESCE(pp_blister.factor_conversion, 1), 4) as CostoBlister,
                ROUND(COALESCE(pcp.costo_promedio_unidad_base, 0) * COALESCE(pp_caja.factor_conversion, 1), 4) as CostoMayor,
                pp_blister.factor_conversion as FactorBlister,
                pp_caja.factor_conversion as FactorCaja,
                pp_mixto.factor_conversion as FactorMixto,
                COALESCE(pp_unidad.activo, 0) as ActivoUnidad,
                COALESCE(pp_blister.activo, 0) as ActivoBlister,
                COALESCE(pp_caja.activo, 0) as ActivoCaja,
                COALESCE(pp_mixto.activo, 0) as ActivoMixto,
                COALESCE(pp_unidad.precio_venta, 0) as PrecioVentaUnidad,
                COALESCE(pp_blister.precio_venta, 0) as PrecioVentaBlister,
                COALESCE(pp_caja.precio_venta, 0) as PrecioVentaMayor,
                COALESCE(pp_mixto.precio_venta, 0) as PrecioVentaMixto,
                p.exento_iva,
                ($scoreSql) as relevancia
            FROM productos p
            LEFT JOIN productos_costo_promedio pcp ON p.id = pcp.producto_id
            LEFT JOIN producto_presentaciones pp_unidad ON p.id = pp_unidad.producto_id AND pp_unidad.presentacion_id = 1
            LEFT JOIN producto_presentaciones pp_blister ON p.id = pp_blister.producto_id AND pp_blister.presentacion_id = 2
            LEFT JOIN producto_presentaciones pp_caja ON p.id = pp_caja.producto_id AND pp_caja.presentacion_id = 3
            LEFT JOIN producto_presentaciones pp_mixto ON p.id = pp_mixto.producto_id AND pp_mixto.presentacion_id = 9
            WHERE ($whereSql) AND p.estado = 1
            ORDER BY relevancia DESC, p.NombreComercial ASC
            LIMIT 10";

    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($results as &$r) {
        $pId = $r['id'];
        $presStmt = $pdo->prepare("SELECT pp.*, pr.nombre as presentacion_nombre 
                                   FROM producto_presentaciones pp
                                   JOIN presentaciones pr ON pp.presentacion_id = pr.id
                                   WHERE pp.producto_id = :pId
                                   ORDER BY pp.orden ASC, pp.presentacion_id ASC");
        $presStmt->execute([':pId' => $pId]);
        $r['presentaciones'] = $presStmt->fetchAll(PDO::FETCH_ASSOC);
    }

    echo json_encode([
        'success' => true,
        'data' => $results
    ]);

} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
