<?php

ob_start();
require_once 'MySQL_funcs.php';
require 'MySQL_config.php';
ob_end_clean();

session_start();

$content = getStandaloneFile('dynmap_config.json');
if (isset($content)) {
    $config = json_decode($content, true);
    $msginterval = $config['webchat-interval'];
} else {
    $msginterval = 2000;
}

if (isset($_SESSION['lastchat'])) {
    $lastchat = $_SESSION['lastchat'];
} else {
    $lastchat = 0;
}

if ($_SERVER['REQUEST_METHOD'] == 'POST' && $lastchat < time()) {
    $micro = microtime(true);
    $timestamp = round($micro * 1000.0);

    $data = json_decode(trim(file_get_contents('php://input')));
    $data->timestamp = $timestamp;
    $data->ip = $_SERVER['REMOTE_ADDR'];
    if (isset($_SESSION['userid'])) {
        $uid = $_SESSION['userid'];
        if (strcmp($uid, '-guest-')) {
            $data->userid = $uid;
        }
    }
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $proxy = array_map('trim', explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']));
        $data->ip = $proxy[0];
    }
    $content = getStandaloneFile('dynmap_webchat.json');
    $gotold = false;
    if (isset($content)) {
        $old_messages = json_decode($content, true);
        $gotold = true;
    }

    if (!empty($old_messages)) {
        foreach ($old_messages as $message) {
            if (($timestamp - $config['updaterate'] - 10000) < $message['timestamp']) {
                $new_messages[] = $message;
            }
        }
    }
    $new_messages[] = $data;

    if ($gotold) {
        updateStandaloneFile('dynmap_webchat.json', json_encode($new_messages));
    } else {
        insertStandaloneFile('dynmap_webchat.json', json_encode($new_messages));
    }

    $_SESSION['lastchat'] = time() + $msginterval;
    echo "{ \"error\" : \"none\" }";
} elseif ($_SERVER['REQUEST_METHOD'] == 'POST' && $lastchat > time()) {
    header('HTTP/1.1 403 Forbidden');
} else {
    echo "{ \"error\" : \"none\" }";
}
cleanupDb();
