<?php
// ✅ Mostrar errores y cabeceras
ini_set('display_errors', 1);
ini_set('display_startup_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(200);
    exit;
}

// ✅ Conexión
require_once(__DIR__ . '/config.php');
if (method_exists($mysqli, 'set_charset')) {
    $mysqli->set_charset('utf8mb4');
}

// ✅ Obtener datos del JSON
$data = json_decode(file_get_contents("php://input"), true);

if (!isset($data['nombre_usuario'], $data['correo'], $data['contrasena'], $data['nombre_tienda'])) {
    echo json_encode(["success" => false, "message" => "Faltan datos obligatorios"]);
    exit;
}

$nombre_usuario = trim($data['nombre_usuario']);
$correo         = trim($data['correo']);
$contrasena     = password_hash($data['contrasena'], PASSWORD_BCRYPT);
$nombre_tienda  = trim($data['nombre_tienda']);
$slug_tienda    = strtolower(preg_replace('/[^a-z0-9]+/', '', str_replace(' ', '-', $nombre_tienda)));

// ✅ Validar duplicados de tienda (nombre o slug)
$check = $mysqli->prepare("SELECT id FROM usuarios_tienda WHERE nombre_tienda = ? OR slug_tienda = ?");
$check->bind_param("ss", $nombre_tienda, $slug_tienda);
$check->execute();
$check->store_result();
if ($check->num_rows > 0) {
    $check->close();
    echo json_encode([
        "success" => false,
        "message" => "⚠️ Ya existe una tienda registrada con ese nombre o slug"
    ]);
    exit;
}
$check->close();

// --- Transacción
$mysqli->begin_transaction();

$stmt = null;
$stmtFlujo = null;

try {
    // ✅ Insertar usuario/tienda
    $stmt = $mysqli->prepare("
        INSERT INTO usuarios_tienda (nombre_usuario, email, password, nombre_tienda, slug_tienda)
        VALUES (?, ?, ?, ?, ?)
    ");
    if (!$stmt) {
        throw new Exception("Prepare usuarios_tienda: ".$mysqli->error);
    }
    $stmt->bind_param("sssss", $nombre_usuario, $correo, $contrasena, $nombre_tienda, $slug_tienda);
    if (!$stmt->execute()) {
        throw new Exception("Execute usuarios_tienda: ".$stmt->error);
    }

    // ✅ Crear carpeta de la tienda + index
    $rutaBase = __DIR__ . "/../tiendas/$slug_tienda";
    if (!file_exists(dirname($rutaBase))) mkdir(dirname($rutaBase), 0755, true);
    if (!file_exists($rutaBase)) {
        if (!mkdir($rutaBase, 0755, true)) {
            throw new Exception("No se pudo crear la carpeta de la tienda");
        }
    }
    $contenidoIndex = <<<HTML
<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <title>$nombre_tienda</title>
  <meta http-equiv="refresh" content="0; url=https://nivor.co/?tienda=$slug_tienda">
</head>
<body>
  <p>Redirigiendo a la tienda $nombre_tienda...</p>
</body>
</html>
HTML;
    file_put_contents("$rutaBase/index.html", $contenidoIndex);

    // ✅ Contenido del flujo por defecto (NOWDOC; no interpola {{ }})
    $contenidoFlujo = <<<'JSON'
{"nodes":[{"id":"cbc808e6-a285-446e-b49f-b25c2a2ec689","type":"apiRequestNode","position":{"x":645.5674635141011,"y":-12.685191498706217},"data":{"label":"apiRequestNode","method":"GET","apiUrl":"https:\/\/server40.vps.webdock.cloud\/api_shop\/ApiInfo.php\/prompt\/{{{variable}}}?telefono={{{telefono}}}&slug_tienda={{{slug_tienda}}}","headers":[{"key":"Content-Type","value":"application\/json"}],"apiResponse":{"data":{"text":"¡Buena pregunta! 📍\n\nPor ahora somos una tienda 100% virtual, ¡así que llegamos a donde quiera que estés con nuestros envíos! 🚚✨\n\n¿Hay algo más en lo que pueda ayudarte? ¡Pregúntame lo que necesites! 😊"},"support":{"historialId":"3006078260_Probando","url":"https:\/\/contentcaddy.io","text":"Powered by Gemini AI"}},"tested":true},"width":300,"height":546,"selected":false,"positionAbsolute":{"x":645.5674635141011,"y":-12.685191498706217},"dragging":false},{"id":"a27196ee-40d9-49fe-bf5d-a5a371b90d75","type":"textNode","position":{"x":-20.566628059553352,"y":75.15096235355804},"data":{"label":"textNode","mensaje":"","libre":true,"opciones":["{{OTHER_MSG}}"]},"width":222,"height":246,"selected":false,"positionAbsolute":{"x":-20.566628059553352,"y":75.15096235355804},"dragging":false},{"id":"17ece38b-b23f-46df-8487-598da076d8bc","type":"takeInputNode","position":{"x":270.7311364749512,"y":-24.475038899878513},"data":{"label":"takeInputNode","variableName":"variable","variableValue":"","mensaje":""},"width":280,"height":176,"selected":false,"positionAbsolute":{"x":270.7311364749512,"y":-24.475038899878513},"dragging":false},{"id":"f967929d-ace0-46cf-8618-ec137f4ac207","type":"apiLoopNode","position":{"x":288.49725042911507,"y":380.998641281622},"data":{"label":"apiLoopNode","mensaje":"{{data.text}}"},"width":280,"height":189,"selected":false,"positionAbsolute":{"x":288.49725042911507,"y":380.998641281622},"dragging":false}],"edges":[{"id":"reactflow__edge-a27196ee-40d9-49fe-bf5d-a5a371b90d75free-mode-17ece38b-b23f-46df-8487-598da076d8bc","source":"a27196ee-40d9-49fe-bf5d-a5a371b90d75","target":"17ece38b-b23f-46df-8487-598da076d8bc","sourceHandle":"free-mode","targetHandle":null,"animated":true,"style":{"stroke":"#4ade80"}},{"id":"reactflow__edge-17ece38b-b23f-46df-8487-598da076d8bcdefault-cbc808e6-a285-446e-b49f-b25c2a2ec689","source":"17ece38b-b23f-46df-8487-598da076d8bc","target":"cbc808e6-a285-446e-b49f-b25c2a2ec689","sourceHandle":"default","targetHandle":null,"animated":true,"style":{"stroke":"#4ade80"}},{"id":"reactflow__edge-cbc808e6-a285-446e-b49f-b25c2a2ec689default-f967929d-ace0-46cf-8618-ec137f4ac207","source":"cbc808e6-a285-446e-b49f-b25c2a2ec689","target":"f967929d-ace0-46cf-8618-ec137f4ac207","sourceHandle":"default","targetHandle":null,"animated":true,"style":{"stroke":"#4ade80"}},{"id":"reactflow__edge-f967929d-ace0-46cf-8618-ec137f4ac207default-17ece38b-b23f-46df-8487-598da076d8bc","source":"f967929d-ace0-46cf-8618-ec137f4ac207","target":"17ece38b-b23f-46df-8487-598da076d8bc","sourceHandle":"default","targetHandle":null,"animated":true,"style":{"stroke":"#4ade80"}}]}
JSON;

    // ✅ Insertar/actualizar flujo GHOST_FLUJO (es_principal = 1 SIEMPRE)
    $sqlFlujo = "
        INSERT INTO flujos_chatbot
            (slug_tienda, nombre_flujo, contenido, es_principal, ejecutor, fecha_creacion, fecha_actualizacion)
        VALUES
            (?, 'GHOST_FLUJO', ?, 1, 'qr', NOW(), NOW())
        ON DUPLICATE KEY UPDATE
            contenido = VALUES(contenido),
            es_principal = 1,
            ejecutor = VALUES(ejecutor),
            fecha_actualizacion = NOW()
    ";
    $stmtFlujo = $mysqli->prepare($sqlFlujo);
    if (!$stmtFlujo) {
        throw new Exception("Prepare flujos_chatbot: ".$mysqli->error);
    }
    $stmtFlujo->bind_param("ss", $slug_tienda, $contenidoFlujo);
    if (!$stmtFlujo->execute()) {
        throw new Exception("Execute flujos_chatbot: ".$stmtFlujo->error);
    }

    // ✅ Todo OK
    $mysqli->commit();

    echo json_encode([
        "success" => true,
        "message" => "✅ Usuario y flujo GHOST_FLUJO creados",
        "slug" => $slug_tienda,
        "ruta_tienda" => "https://nivor.co/tiendas/$slug_tienda/",
        "flujo_chatbot" => "GHOST_FLUJO principal creado/actualizado"
    ]);
} catch (Throwable $e) {
    $mysqli->rollback();
    echo json_encode([
        "success" => false,
        "message" => "❌ Error en el proceso: ".$e->getMessage()
    ]);
} finally {
    // 🔒 Cierre seguro (sin dobles cierres)
    $safeClose = function (&$s) {
        if ($s instanceof mysqli_stmt) {
            @$s->close();
            $s = null;
        }
    };
    $safeClose($stmt);
    $safeClose($stmtFlujo);
    if ($mysqli instanceof mysqli) {
        @$mysqli->close();
    }
}
