<?php
/**
 * API para gestionar la tracklist de invitados
 * 
 * Endpoints:
 * - POST: Agregar una canción
 * - DELETE: Eliminar una canción
 */

header('Content-Type: application/json; charset=utf-8');
ob_start();

require_once '../../includes/db.php';
require_once '../../includes/functions.php';

ob_clean();

$method = $_SERVER['REQUEST_METHOD'];
$rawInput = file_get_contents('php://input');
$data = json_decode($rawInput, true);

if (json_last_error() !== JSON_ERROR_NONE) {
    ob_clean();
    echo json_encode(['success' => false, 'message' => 'Error al procesar los datos recibidos']);
    exit;
}

// Obtener ID y token (soporta tanto 'id' como 'invitado_id' para compatibilidad)
$invitadoId = isset($data['invitado_id']) ? (int)$data['invitado_id'] : (isset($data['id']) ? (int)$data['id'] : 0);
$tokenRaw = isset($data['token']) ? (string)$data['token'] : '';
$token = trim($tokenRaw);

// Validar parámetros
if ($invitadoId <= 0) {
    ob_clean();
    echo json_encode(['success' => false, 'message' => 'ID de invitado no válido']);
    exit;
}

if (empty($token) || strlen($token) < 16 || strlen($token) > 64) {
    ob_clean();
    echo json_encode(['success' => false, 'message' => 'Token inválido']);
    exit;
}

// Validar invitado
$invitado = obtenerInvitadoPorIdYToken($invitadoId, $token);

if (!$invitado) {
    $invitado = obtenerInvitadoPorToken($token);
    if ($invitado && $invitado['id'] != $invitadoId) {
        $invitadoId = (int)$invitado['id'];
    }
}

if (!$invitado) {
    ob_clean();
    echo json_encode(['success' => false, 'message' => 'Invitación no encontrada o parámetros inválidos']);
    exit;
}

// Obtener evento_id del invitado
$eventoId = (int)$invitado['evento_id'];

try {
    if ($method === 'POST') {
        // Agregar canción
        $autor = isset($data['autor']) ? trim($data['autor']) : '';
        $nombreCancion = isset($data['nombre_cancion']) ? trim($data['nombre_cancion']) : '';
        
        if (empty($autor) || empty($nombreCancion)) {
            ob_clean();
            echo json_encode(['success' => false, 'message' => 'Debe completar ambos campos (Artista y Canción)']);
            exit;
        }
        
        // Validar longitud
        if (strlen($autor) > 255 || strlen($nombreCancion) > 255) {
            ob_clean();
            echo json_encode(['success' => false, 'message' => 'Los campos son demasiado largos']);
            exit;
        }
        
        $stmt = $pdo->prepare("
            INSERT INTO eventos_tracklist (evento_id, invitado_id, autor, nombre_cancion, activo)
            VALUES (?, ?, ?, ?, 1)
        ");
        
        $stmt->execute([
            $eventoId,
            $invitadoId,
            sanitize($autor),
            sanitize($nombreCancion)
        ]);
        
        $cancionId = $pdo->lastInsertId();
        
        ob_clean();
        echo json_encode([
            'success' => true,
            'message' => 'Canción agregada correctamente',
            'cancion_id' => $cancionId,
            'cancion' => [
                'id' => (int)$cancionId,
                'autor' => $autor,
                'nombre_cancion' => $nombreCancion
            ]
        ]);
        
    } elseif ($method === 'DELETE') {
        // Eliminar canción
        $cancionId = isset($data['cancion_id']) ? (int)$data['cancion_id'] : 0;
        
        if ($cancionId <= 0) {
            ob_clean();
            echo json_encode(['success' => false, 'message' => 'ID de canción no válido']);
            exit;
        }
        
        // Verificar que la canción pertenece al invitado
        $stmtCheck = $pdo->prepare("
            SELECT id FROM eventos_tracklist 
            WHERE id = ? AND invitado_id = ? AND evento_id = ?
        ");
        $stmtCheck->execute([$cancionId, $invitadoId, $eventoId]);
        
        if (!$stmtCheck->fetch()) {
            ob_clean();
            echo json_encode(['success' => false, 'message' => 'Canción no encontrada o no tiene permisos']);
            exit;
        }
        
        // Eliminar (soft delete)
        $stmt = $pdo->prepare("
            UPDATE eventos_tracklist 
            SET activo = 0 
            WHERE id = ? AND invitado_id = ? AND evento_id = ?
        ");
        
        $stmt->execute([$cancionId, $invitadoId, $eventoId]);
        
        ob_clean();
        echo json_encode([
            'success' => true,
            'message' => 'Canción eliminada correctamente'
        ]);
        
    } else {
        ob_clean();
        echo json_encode(['success' => false, 'message' => 'Método no permitido']);
    }
    
} catch (Exception $e) {
    error_log("Error en tracklist.php: " . $e->getMessage());
    ob_clean();
    echo json_encode(['success' => false, 'message' => 'Error al procesar: ' . $e->getMessage()]);
    exit;
}