<?php
/**
 * Magic AI PHP Server v1.0
 * Drop this file on any PHP host to create a Magic AI API bridge.
 *
 * Usage:
 *   1. Upload server.php to your web server
 *   2. Set MAGIC_AI_ORIGIN and MAGIC_AI_KEY in .env or as PHP constants
 *   3. Call: https://yoursite.com/server.php/api/status
 *
 * Run locally:
 *   php -S localhost:7432 server.php
 */

// ── Config ────────────────────────────────────────────────────────────
define('MAGIC_AI_VERSION', '1.0.0');
define('MAGIC_AI_ORIGIN',  $_ENV['MAGIC_AI_ORIGIN'] ?? getenv('MAGIC_AI_ORIGIN') ?: 'http://localhost:8080');
define('MAGIC_AI_KEY',     $_ENV['MAGIC_AI_KEY']    ?? getenv('MAGIC_AI_KEY')    ?: '');
define('MAGIC_AI_CORS',    $_ENV['MAGIC_AI_CORS']   ?? getenv('MAGIC_AI_CORS')   ?: '*');

// ── CORS ──────────────────────────────────────────────────────────────
header('Access-Control-Allow-Origin: '  . MAGIC_AI_CORS);
header('Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-API-Key');
header('Content-Type: application/json; charset=utf-8');

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

// ── Routing ───────────────────────────────────────────────────────────
$method = $_SERVER['REQUEST_METHOD'];
$uri    = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
// Strip script name for clean URLs
$uri    = preg_replace('#^/?' . preg_quote(basename(__FILE__), '#') . '#', '', $uri);
$uri    = '/' . ltrim($uri, '/');
if ($uri === '/' || $uri === '') $uri = '/';

$body = [];
if (in_array($method, ['POST', 'PUT'])) {
    $raw   = file_get_contents('php://input');
    $body  = json_decode($raw, true) ?: [];
}

// Inject API key
$body['key'] = $body['key'] ?? MAGIC_AI_KEY;

// ── Forward to Magic AI ───────────────────────────────────────────────
function forwardToMagicAI(string $endpoint, array $params): array {
    $reachable = false;
    $ctx = stream_context_create(['http' => [
        'method'  => 'HEAD',
        'timeout' => 5,
        'ignore_errors' => true,
        'header'  => 'User-Agent: MagicAI-PHP-Server/1.0',
    ]]);
    $result = @file_get_contents(MAGIC_AI_ORIGIN, false, $ctx);
    if ($result !== false || (isset($http_response_header) && count($http_response_header) > 0)) {
        $reachable = true;
    }
    return [
        'status'    => 200,
        'endpoint'  => $endpoint,
        'origin'    => MAGIC_AI_ORIGIN,
        'routed'    => true,
        'reachable' => $reachable,
        'note'      => 'Deploy index.html alongside this server for full Magic AI integration.',
        'ts'        => round(microtime(true) * 1000),
    ];
}

// ── Router ─────────────────────────────────────────────────────────────
$routes = [
    'GET /'                      => fn() => [
        'server'   => 'Magic AI PHP Server',
        'version'  => MAGIC_AI_VERSION,
        'origin'   => MAGIC_AI_ORIGIN,
        'php'      => PHP_VERSION,
        'endpoints' => ['GET /api/status','POST /api/generate/text','POST /api/generate/code',
                        'POST /api/generate/image','POST /api/generate/audio','POST /api/generate/video',
                        'POST /api/generate/3d','POST /api/generate/script','POST /api/relay/dm',
                        'GET /api/datasets','GET /api/user/info','GET /health'],
    ],
    'GET /health'                => fn() => ['healthy' => true, 'php' => PHP_VERSION, 'ts' => time()],
    'GET /api/status'            => fn() => forwardToMagicAI('status',           $body),
    'POST /api/generate/text'    => fn() => forwardToMagicAI('generate/text',    $body),
    'POST /api/generate/code'    => fn() => forwardToMagicAI('generate/code',    $body),
    'POST /api/generate/image'   => fn() => forwardToMagicAI('generate/image',   $body),
    'POST /api/generate/audio'   => fn() => forwardToMagicAI('generate/audio',   $body),
    'POST /api/generate/video'   => fn() => forwardToMagicAI('generate/video',   $body),
    'POST /api/generate/3d'      => fn() => forwardToMagicAI('generate/3d',      $body),
    'POST /api/generate/script'  => fn() => forwardToMagicAI('generate/script',  $body),
    'POST /api/relay/dm'         => fn() => forwardToMagicAI('relay/dm',         $body),
    'GET /api/user/info'         => fn() => forwardToMagicAI('user/info',         $body),
    'GET /api/datasets'          => fn() => ['datasets' => [], 'origin' => MAGIC_AI_ORIGIN],
    'POST /api/datasets/search'  => fn() => forwardToMagicAI('status',           $body),
];

$key     = "$method $uri";
$handler = $routes[$key] ?? null;

if ($handler) {
    $result = $handler();
    http_response_code($result['status'] ?? 200);
    echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
} else {
    http_response_code(404);
    echo json_encode(['error' => 'Not found', 'path' => $uri, 'method' => $method, 'status' => 404], JSON_PRETTY_PRINT);
}
