<?php
header('Content-Type: application/json; charset=utf-8');
require_once __DIR__ . '/../config/db.php';

try {
    $pdo = getConnection();
    $descripcion = isset($_GET['descripcion']) ? trim($_GET['descripcion']) : '';

    if (!$descripcion) {
        throw new Exception('Descripción no proporcionada');
    }

    // Normalizar la búsqueda (remover asteriscos iniciales si existen)
    $descripcion_norm = preg_replace('/^\*+/', '', $descripcion);

    $sql = "SELECT m.producto_id, p.CodigoInterno, p.NombreComercial, 
                   COALESCE(pp_blister.factor_conversion, 1) as FactorBlister,
                   COALESCE(pp_caja.factor_conversion, 1) as FactorCaja, 
                   COALESCE(pp_unidad.precio_venta, 0) as PrecioVentaUnidad,
                   COALESCE(pp_blister.precio_venta, 0) as PrecioVentaBlister,
                   COALESCE(pp_caja.precio_venta, 0) as PrecioVentaMayor,
                   0 as PrecioVentaMixto,
                   p.exento_iva
            FROM fel_producto_mapping m
            JOIN productos p ON m.producto_id = p.id
            LEFT JOIN producto_presentaciones pp_unidad ON p.id = pp_unidad.producto_id AND pp_unidad.presentacion_id = 1 AND pp_unidad.activo = 1
            LEFT JOIN producto_presentaciones pp_blister ON p.id = pp_blister.producto_id AND pp_blister.presentacion_id = 2 AND pp_blister.activo = 1
            LEFT JOIN producto_presentaciones pp_caja ON p.id = pp_caja.producto_id AND pp_caja.presentacion_id = 3 AND pp_caja.activo = 1
            WHERE m.descripcion_factura = :desc OR m.descripcion_factura = :desc_norm";
    
    $stmt = $pdo->prepare($sql);
    $stmt->execute([':desc' => $descripcion, ':desc_norm' => $descripcion_norm]);
    $mappings = $stmt->fetchAll(PDO::FETCH_ASSOC);

    if (count($mappings) > 0) {
        foreach ($mappings as &$m) {
            $pId = $m['producto_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]);
            $m['presentaciones'] = $presStmt->fetchAll(PDO::FETCH_ASSOC);
        }
        echo json_encode([
            'success' => true,
            'mappings' => $mappings
        ]);
    } else {
        // Fallback: search by exact product name in master
        $stmtP = $pdo->prepare("SELECT p.id as producto_id, p.CodigoInterno, p.NombreComercial, 
                                       COALESCE(pp_blister.factor_conversion, 1) as FactorBlister,
                                       COALESCE(pp_caja.factor_conversion, 1) as FactorCaja, 
                                       COALESCE(pp_unidad.precio_venta, 0) as PrecioVentaUnidad,
                                       COALESCE(pp_blister.precio_venta, 0) as PrecioVentaBlister,
                                       COALESCE(pp_caja.precio_venta, 0) as PrecioVentaMayor,
                                       0 as PrecioVentaMixto,
                                       p.exento_iva 
                                FROM productos p
                                LEFT JOIN producto_presentaciones pp_unidad ON p.id = pp_unidad.producto_id AND pp_unidad.presentacion_id = 1 AND pp_unidad.activo = 1
                                LEFT JOIN producto_presentaciones pp_blister ON p.id = pp_blister.producto_id AND pp_blister.presentacion_id = 2 AND pp_blister.activo = 1
                                LEFT JOIN producto_presentaciones pp_caja ON p.id = pp_caja.producto_id AND pp_caja.presentacion_id = 3 AND pp_caja.activo = 1
                                WHERE UPPER(TRIM(p.NombreComercial)) = UPPER(TRIM(:nombre)) 
                                   OR UPPER(TRIM(p.NombreComercial)) = UPPER(TRIM(:nombre_norm))");
        $stmtP->execute([':nombre' => $descripcion, ':nombre_norm' => $descripcion_norm]);
        $fallback = $stmtP->fetchAll(PDO::FETCH_ASSOC);

        foreach ($fallback as &$f) {
            $pId = $f['producto_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]);
            $f['presentaciones'] = $presStmt->fetchAll(PDO::FETCH_ASSOC);
        }

        echo json_encode([
            'success' => (count($fallback) > 0),
            'mappings' => $fallback
        ]);
    }

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