<?php
/**
 * API de Plantillas de Discord - Eliminar
 * Este script es llamado por la función deleteTemplate() en list.php
 */

// Habilitar logging de errores
ini_set('display_errors', 0);
error_reporting(E_ALL);

// Función de logging mejorada
function logError($message, $data = null) {
    $logDir = '/var/www/html/bot/logs/discord/';
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0777, true);
    }
    $logFile = $logDir . 'error.log';
    $timestamp = date('Y-m-d H:i:s');
    $logMessage = "[$timestamp] [ERROR] $message";
    if ($data) {
        $logMessage .= "\n" . (is_string($data) ? $data : json_encode($data, JSON_PRETTY_PRINT));
    }
    error_log($logMessage . "\n", 3, $logFile);
}

// Iniciar buffer para capturar cualquier salida no deseada
ob_start();

try {
    header('Content-Type: application/json');
    
    // Registrar inicio
    logError("Inicio de eliminación de plantilla");
    
    // Incluir dependencias
    require_once __DIR__ . '/../../../shared/utils/helpers.php';
    require_once __DIR__ . '/../../../shared/auth/jwt.php';
    require_once __DIR__ . '/../../../shared/database/connection.php';
    
    // Limpiar buffer por si hay salida no deseada
    ob_clean();
    
    // Autenticación JWT para API (no redirigir)
    $userData = JWTAuth::authenticate();
    if (!$userData) {
        http_response_code(401);
        echo json_encode(['success' => false, 'error' => 'Acceso no autorizado.']);
        logError("Error de autenticación");
        exit;
    }
    
    logError("Usuario autenticado: " . json_encode(['id' => $userData->userId, 'username' => $userData->username]));
    
    // Verificar método
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        http_response_code(405);
        echo json_encode(['success' => false, 'error' => 'Método no permitido.']);
        logError("Método no permitido: " . $_SERVER['REQUEST_METHOD']);
        exit;
    }
    
    // Obtener datos del cuerpo de la petición
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);
    $template_id = $data['id'] ?? null;
    
    logError("Datos recibidos", ['input' => $input, 'data' => $data, 'template_id' => $template_id]);
    
    // Validar ID
    if (!$template_id || !is_numeric($template_id)) {
        http_response_code(400);
        echo json_encode(['success' => false, 'error' => 'ID de plantilla inválido o no proporcionado.']);
        logError("ID de plantilla inválido", ['template_id' => $template_id]);
        exit;
    }
    
    // Conectar a la base de datos
    try {
        $db = getDB();
        logError("Conexión a BD exitosa");
    } catch (Exception $e) {
        logError("Error al conectar a la base de datos", $e->getMessage());
        throw $e;
    }
    
    // Iniciar transacción
    $db->beginTransaction();
    logError("Transacción iniciada");
    
    try {
        // 1. Eliminar comandos asociados (si existen)
        $stmt = $db->prepare("DELETE FROM comandos_discord WHERE plantilla_id = ?");
        $stmt->execute([$template_id]);
        $deletedCommands = $stmt->rowCount();
        logError("Comandos eliminados", ['count' => $deletedCommands]);
        
        // 2. Intentar eliminar la plantilla
        $stmt = $db->prepare("DELETE FROM plantillas_discord WHERE id = ?");
        $stmt->execute([$template_id]);
        $deleted = $stmt->rowCount();
        
        if ($deleted > 0) {
            $db->commit();
            logError("Plantilla eliminada exitosamente", ['id' => $template_id]);
            echo json_encode(['success' => true]);
        } else {
            $db->rollBack();
            http_response_code(404);
            logError("No se encontró la plantilla para eliminar", ['id' => $template_id]);
            echo json_encode(['success' => false, 'error' => 'No se encontró la plantilla para eliminar.']);
        }
    } catch (Exception $e) {
        $db->rollBack();
        logError("Error en la transacción", [
            'error' => $e->getMessage(),
            'trace' => $e->getTraceAsString()
        ]);
        http_response_code(500);
        echo json_encode([
            'success' => false, 
            'error' => 'Ocurrió un error en el servidor.',
            'detail' => $e->getMessage()
        ]);
    }
} catch (Exception $e) {
    logError("Error no manejado", [
        'error' => $e->getMessage(),
        'trace' => $e->getTraceAsString()
    ]);
    http_response_code(500);
    echo json_encode([
        'success' => false, 
        'error' => 'Error interno del servidor.',
        'detail' => $e->getMessage()
    ]);
}

// Limpiar cualquier salida no deseada
ob_end_flush();
