<?php

declare(strict_types=1);

/**
 * Ejecuta el parche SQL para añadir Notas de Crédito y Débito al menú, tablas y perfiles.
 * Ejecutar: php bin/db-patch-sales-adjustments.php
 */

require_once dirname(__DIR__) . '/config/bootstrap.php';

use ApiModel\Infrastructure\Persistence\Database;

$sqlFile = dirname(__DIR__) . '/docs/db_patch_sales_adjustments.sql';

echo "=== APLICANDO PARCHE DE NOTAS DE CRÉDITO Y DÉBITO ===\n";

if (! is_file($sqlFile)) {
    fwrite(STDERR, "No se encontró el archivo: {$sqlFile}\n");
    exit(1);
}

try {
    $pdo = Database::connect();
    $driver = $pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
    echo "Conectado a la base de datos ({$driver}).\n";

    $sql = file_get_contents($sqlFile);
    if ($sql === false) {
        throw new RuntimeException("No se pudo leer el archivo SQL");
    }

    if ($driver === 'sqlite') {
        echo "Adaptando patch para SQLite...\n";
        $sql = str_replace('auth.', '', $sql);
        $sql = str_replace('public.', '', $sql);
        $sql = str_replace('gen_random_uuid()', "(lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-4' || substr(lower(hex(randomblob(2))),2) || '-' || substr(lower(hex(randomblob(2))),1,3) || '-' || lower(hex(randomblob(6))))", $sql);
        $sql = str_replace('CURRENT_TIMESTAMP', "datetime('now')", $sql);
    }

    $pdo->exec($sql);
    echo "Parche de Notas de Crédito y Débito aplicado exitosamente.\n";
    echo "=== PROCESO COMPLETADO ===\n";
} catch (Throwable $e) {
    fwrite(STDERR, "ERROR: " . $e->getMessage() . "\n");
    exit(1);
}
