<?php
/**
 * Script de base de datos y migración segura de mapeos.
 * Crea la tabla fel_importacion_detalle_mapeo y migra los datos históricos.
 */
header('Content-Type: application/json; charset=utf-8');
require_once __DIR__ . '/../config/db.php';

try {
    $pdo = getConnection();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 1. Crear la tabla relacional sin FKs restrictivos (debido a motores MyISAM/InnoDB mixtos)
    $sqlCreateTable = "
        CREATE TABLE IF NOT EXISTS `fel_importacion_detalle_mapeo` (
            `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            `importacion_detalle_id` BIGINT UNSIGNED NOT NULL,
            `producto_id` BIGINT UNSIGNED NOT NULL,
            `cantidad` DECIMAL(10,2) NOT NULL,
            `fecha_mapeo` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            INDEX `idx_importacion_detalle` (`importacion_detalle_id`),
            INDEX `idx_producto` (`producto_id`),
            INDEX `idx_detalle_producto` (`importacion_detalle_id`, `producto_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
    ";
    
    $pdo->exec($sqlCreateTable);
    $tableCreated = true;

    // 2. Migrar mapeos históricos existentes
    // Buscamos registros en fel_importacion_detalle que tengan una descripción
    // registrada en fel_producto_mapping, pero que NO existan en la nueva tabla
    $stmtSelect = $pdo->query("
        SELECT fd.id as importacion_detalle_id, m.producto_id, fd.cantidad_total
        FROM fel_importacion_detalle fd
        JOIN fel_producto_mapping m ON fd.descripcion = m.descripcion_factura
        LEFT JOIN fel_importacion_detalle_mapeo dm ON fd.id = dm.importacion_detalle_id
        WHERE dm.id IS NULL
    ");
    
    $pending = $stmtSelect->fetchAll(PDO::FETCH_ASSOC);
    $migratedCount = 0;

    if (count($pending) > 0) {
        $pdo->beginTransaction();
        
        $stmtInsert = $pdo->prepare("
            INSERT INTO fel_importacion_detalle_mapeo (importacion_detalle_id, producto_id, cantidad)
            VALUES (:det_id, :prod_id, :cant)
        ");

        foreach ($pending as $row) {
            $stmtInsert->execute([
                ':det_id'  => $row['importacion_detalle_id'],
                ':prod_id' => $row['producto_id'],
                ':cant'    => $row['cantidad_total']
            ]);
            $migratedCount++;
        }

        $pdo->commit();
    }

    echo json_encode([
        'success' => true,
        'message' => 'Migración completada con éxito',
        'tabla_creada' => $tableCreated,
        'registros_migrados' => $migratedCount
    ]);

} catch (Exception $e) {
    if (isset($pdo) && $pdo->inTransaction()) {
        $pdo->rollBack();
    }
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage()
    ]);
}
?>
