<?php
/**
 * API - Obtener URL temporal del media de WhatsApp
 * Parámetros: id (media id)
 */
require_once '../config/config.php';

// Permitir que accesos directos desde navegador (GET sin Accept:application/json) redirijan al media sin requerir sesión.
$isGet = $_SERVER['REQUEST_METHOD'] === 'GET';
$accept = $_SERVER['HTTP_ACCEPT'] ?? '';
$wantsJson = strpos($accept, 'application/json') !== false;

// Requerir autenticación sólo para peticiones que no sean GET puro o cuando se solicite JSON (AJAX/API)
if (!$isGet || $wantsJson) {
    requireAuthentication();
}

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

$mediaId = $_GET['id'] ?? ($_POST['id'] ?? null);

// Validar que mediaId no esté vacío y sea válido
if (empty($mediaId) || !is_string($mediaId) || trim($mediaId) === '') {
    error_log("get_media.php: mediaId inválido o vacío recibido: " . var_export($mediaId, true));
    http_response_code(400);
    echo json_encode([
        'error' => 'Invalid media ID',
        'hint' => 'Media ID cannot be empty or invalid'
    ]);
    exit;
}

$token = getConfigFromDB('whatsapp_token', '');
$apiUrl = rtrim(getConfigFromDB('whatsapp_api_url', 'https://graph.facebook.com/v22.0/'), '/');

$url = "{$apiUrl}/{$mediaId}";

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $token ],
    CURLOPT_TIMEOUT => 10,
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$err = curl_error($ch);
curl_close($ch);

if ($err) {
    http_response_code(502);
    echo json_encode(['error' => 'Error comunicando con Graph API', 'detail' => $err]);
    exit;
}

$decoded = json_decode($response, true);
if ($httpCode >= 400 || !$decoded) {
    http_response_code($httpCode ?: 500);
    echo json_encode(['error' => 'Graph API error', 'response' => $decoded]);
    exit;
}

// Normalmente Graph devuelve field 'url'
$mediaUrl = $decoded['url'] ?? ($decoded['data'][0]['url'] ?? null);
if (!$mediaUrl) {
    http_response_code(404);
    echo json_encode(['error' => 'No se recibió URL del media', 'raw' => $decoded]);
    exit;
}

// Si es una petición GET y el cliente no espera JSON, redirigir al URL real para que `<img src="api/get_media.php?id=...">` funcione directamente
$isGet = $_SERVER['REQUEST_METHOD'] === 'GET';
$accept = $_SERVER['HTTP_ACCEPT'] ?? '';

if ($isGet && strpos($accept, 'application/json') === false) {
    // Cache corto para navegadores
    header('Cache-Control: public, max-age=3600');
    header('Location: ' . $mediaUrl, true, 302);
    exit;
}

// Retornar URL en JSON (cliente puede solicitar directamente)
header('Content-Type: application/json; charset=utf-8');
echo json_encode(['success' => true, 'url' => $mediaUrl]);
