<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");
header("Access-Control-Allow-Methods: POST, OPTIONS");
header("Content-Type: application/json");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(204);
    exit;
}

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

// Inicializamos $stmt a null para que exista en el ámbito del bloque finally
 $stmt = null;

// El frontend envía los datos como FormData, así que se acceden desde $_POST
if (empty($_POST['slug_tienda'])) {
    echo json_encode(['success' => false, 'error' => 'Falta el slug de la tienda.']);
    exit;
}

 $slug_tienda = trim($_POST['slug_tienda']);

// Recoger y limpiar el resto de los datos del formulario
 $nit                    = trim($_POST['nit'] ?? '');
 $direccion              = trim($_POST['direccion'] ?? '');
 $telefono               = trim($_POST['telefono'] ?? '');
 $correo                 = trim($_POST['correo'] ?? '');
 $resolucion_facturas    = trim($_POST['resolucion_facturas'] ?? '');
 $prefijo_factura        = trim($_POST['prefijo_factura'] ?? '');
 $rango_autorizado_desde = !empty($_POST['rango_autorizado_desde']) ? intval($_POST['rango_autorizado_desde']) : null;
 $rango_autorizado_hasta = !empty($_POST['rango_autorizado_hasta']) ? intval($_POST['rango_autorizado_hasta']) : null;
 $fecha_vencimiento      = !empty($_POST['fecha_vencimiento']) ? $_POST['fecha_vencimiento'] : null;
 $regimen_tributario     = trim($_POST['regimen_tributario'] ?? '');
 $codigo_ciiu            = trim($_POST['codigo_ciiu'] ?? '');
 $representante_legal    = trim($_POST['representante_legal'] ?? '');
 $ciudad                 = trim($_POST['ciudad'] ?? '');
 $departamento           = trim($_POST['departamento'] ?? '');
 $pais                   = trim($_POST['pais'] ?? 'Colombia');
 $matricula_mercantil    = trim($_POST['matricula_mercantil'] ?? '');

/* ===========================
   UPSERT (INSERT o UPDATE)
=========================== */
try {
    // Usamos INSERT ... ON DUPLICATE KEY UPDATE para crear o actualizar el registro de forma atómica.
    // Si el slug_tienda ya existe (por la clave única), se ejecuta la parte UPDATE.
    $stmt = $mysqli->prepare("
        INSERT INTO info_empresa (
            slug_tienda, nit, direccion, telefono, correo, resolucion_facturas, 
            prefijo_factura, rango_autorizado_desde, rango_autorizado_hasta, 
            fecha_vencimiento, regimen_tributario, codigo_ciiu, representante_legal, 
            ciudad, departamento, pais, matricula_mercantil
        ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        ON DUPLICATE KEY UPDATE
            nit = VALUES(nit),
            direccion = VALUES(direccion),
            telefono = VALUES(telefono),
            correo = VALUES(correo),
            resolucion_facturas = VALUES(resolucion_facturas),
            prefijo_factura = VALUES(prefijo_factura),
            rango_autorizado_desde = VALUES(rango_autorizado_desde),
            rango_autorizado_hasta = VALUES(rango_autorizado_hasta),
            fecha_vencimiento = VALUES(fecha_vencimiento),
            regimen_tributario = VALUES(regimen_tributario),
            codigo_ciiu = VALUES(codigo_ciiu),
            representante_legal = VALUES(representante_legal),
            ciudad = VALUES(ciudad),
            departamento = VALUES(departamento),
            pais = VALUES(pais),
            matricula_mercantil = VALUES(matricula_mercantil)
    ");

    // s: string, i: integer
    $stmt->bind_param(
        "sssssssiissssssss",
        $slug_tienda,
        $nit,
        $direccion,
        $telefono,
        $correo,
        $resolucion_facturas,
        $prefijo_factura,
        $rango_autorizado_desde,
        $rango_autorizado_hasta,
        $fecha_vencimiento,
        $regimen_tributario,
        $codigo_ciiu,
        $representante_legal,
        $ciudad,
        $departamento,
        $pais,
        $matricula_mercantil
    );

    if (!$stmt->execute()) {
        throw new Exception('Error al ejecutar la consulta de guardado: ' . $stmt->error);
    }

    // --- LA LÍNEA $stmt->close(); HA SIDO ELIMINADA DE AQUÍ ---

    echo json_encode([
        'success' => true,
        'message' => '✅ Información de la empresa guardada correctamente.'
    ]);

} catch (Throwable $e) {
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'error'   => '❌ Error al guardar la información.',
        'details' => $e->getMessage()
    ]);
} finally {
    // El bloque finally se encarga de cerrar la declaración de forma segura.
    if ($stmt instanceof mysqli_stmt) {
        $stmt->close();
    }
    $mysqli->close();
}