<?php

include_once '.autoload.php';

$config = Axioma\Config::instance();
foreach ($_POST as $key => $value) {
    if ($key != 'page' && $key != 'action' && $key != 'step') {
        $config->setValue($key, $value);
    }
}

$app = new Axioma\Server\App();

use Axioma\Utils as utils;

$correct = true;

$errors = array();
$warnings = array();
$info = array();
$error = '';

if (isset($_POST['action']) && ($_POST['action'] === 'activate')) {
    require 'activation.php';
    exit;
}

if (isset($_POST['action']) && ($_POST['action'] == 'save')) {
    $save_success = $config->save($error);
    if ($save_success === false) {
        $errors[] = $error;
    }

    if ($save_success) {
        $save_success = $app->saveAppConfig($error);
        if ($save_success === false) {
            $errors[] = $error;
        }
    }
    if ($save_success) {
        $info[] = _('Настройки сервера сохранены');
    }
}

if (isset($_POST['action']) && ($_POST['action'] == 'test_run')) {
    if ($app->pingApp($error)) {
        $info[] = _('Соединение успешно установлено');
    } else {
        $errors[] = $error;
    }
}

if (isset($_POST['action']) && ($_POST['action'] == 'terminate_app')) {
    if ($app->terminateApp($error)) {
        $warnings[] = _('Приложение сервера остановлено');
    } else {
        $errors[] = $error;
    }
}

if (isset($_POST['action']) && ($_POST['action'] == 'restart_app')) {
    if ($app->terminateApp($error)) {
        $info[] = _('Приложение сервера перезапущено');
    } else {
        $errors[] = $error;
    }
}

if ($config->changed) {
    $warnings[] = _('Текущие настройки не сохранены в файл');
}

$req_errors = array();
if (!utils::checkPhpRequirements($req_errors)) {
    $errors = array_merge($errors, $req_errors);
}
?>

<div class="formDiv normalBorder">
    <table class="formTbl">
        <tr>
            <th><label for="app_root"><?php echo _('Рабочий каталог приложения:'); ?></label></th>
            <td><input type="text" name="app_root" value="<?php echo htmlspecialchars($app->rootDir(false)); ?>"
                    onchange="submit_page(this.name, this.value);"/>
            </td>
            <td class="check">
                <?php $correct = $correct && utils::callCheck($app, 'checkRoot', $errors, $warnings); ?>
            </td>
        </tr>
        <?php if (!Axioma\Utils::isAbsolutePath($app->rootDir(false))) { ?>
        <tr>
            <th><?php echo _('Абсолютный путь к каталогу:'); ?></th>
            <td><?php echo htmlspecialchars($app->rootDir()); ?></td>
            <td>&nbsp;</td>
        </tr>
        <?php }
        if ($correct) { ?>
        <tr>
            <th><?php echo _('Исполняемый файл приложения:'); ?></th>
            <td><?php echo htmlspecialchars($app->exePath(false)); ?></td>
            <td class="check">
                <?php $correct = $correct && utils::callCheck($app, 'checkExe', $errors, $warnings); ?>
            </td>
        </tr>
        <?php }
        if ($correct) { ?>
        <tr>
            <th><label for="app_ini"><?php echo _('Файл настроек приложения:'); ?></label></th>
            <td><input type="text" name="app_ini"
                    value="<?php echo htmlspecialchars($app->iniPath(false)); ?>"
                    onchange="submit_page(this.name, this.value);"/>
            </td>
            <td class="check">
                <?php $correct = $correct && utils::callCheck($app, 'checkIni', $errors, $warnings); ?>
            </td>
        </tr>
        <?php }
        if ($correct) { ?>
        <tr>
            <th><label for="app_license"><?php echo _('Файл лицензии:'); ?></label></th>
            <td><input type="text" name="app_license"
                    value="<?php echo htmlspecialchars($app->licensePath(false)); ?>"
                    onchange="submit_page(this.name, this.value);"/>
            </td>
            <td class="check">
                <?php $correct = $correct && utils::callCheck($app, 'checkLicense', $errors, $warnings);
                $needActivation = !$correct;
                ?>
            </td>
        </tr>
        <?php }
        if ($correct) { ?>
        <tr>
            <th><label for="app_port"><?php echo _('Порт сервера:'); ?></label></th>
            <td><input type="number" name="app_port" min="1024" max="65535" step="1"
                value="<?php echo $app->appPort(); ?>"
                onchange="submit_page(this.name, this.value);"/>
            <td>&nbsp;</td>
        </tr>
        <?php } ?>
    </table>
</div>

<?php
$correct = $config->checkSave($error) && $correct;
if (!$correct) {
    $errors[] = $error;
}

if ($correct) {
    $log_tail = $app->getLogTail(20, DateInterval::createFromDateString('30 minutes'), $error);
    if (!empty($error)) {
        $errors[] = $error;
    }
}
?>

<div class="formDiv normalBorder">
<table class="buttonTbl">
    <tr>
        <td><input type="button" value="<?php echo _('Сохранить настройки'); ?>"
                            <?php if (!$correct || !$config->changed) {
                                echo 'disabled';
                            } ?>
                            onclick="submit_page('action', 'save');"/>
        </td>
        <td><input type="button" value="<?php echo _('Активировать программу'); ?>"
                            <?php if (!isset($needActivation)) {
                                echo 'disabled';
                            } ?>
                            onclick="activate();"/>
        </td>
    </tr>
    <tr>
        <td><input type="button" value="<?php echo _('Проверить соединение'); ?>"
                            <?php if (!$correct) {
                                echo 'disabled';
                            } ?>
                            onclick="submit_page('action', 'test_run');"/>
        </td>
        <td><input type="button" id="log_button" value="<?php echo _('Показать журнал сервера'); ?>"
                            <?php if (empty($log_tail)) {
                                echo 'disabled';
                            } ?>
                            onclick="show_log();"/>
        </td>
    </tr>
    <tr>
        <td><input type="button" value="<?php echo _('Остановить приложение сервера'); ?>"
                            <?php if (!$correct) {
                                echo 'disabled';
                            } ?>
                            onclick="submit_page('action', 'terminate_app');"/>
        </td>
        <td><input type="button" value="<?php echo _('Перезапустить приложение сервера'); ?>"
                            <?php if (!$correct) {
                                echo 'disabled';
                            } ?>
                            onclick="submit_page('action', 'restart_app');"/>
        </td>
    </tr>
    <tr>
        <td><input type="button" value="<?php echo _('Вернуться на главную'); ?>"
                <?php if (!$correct) {
                    echo 'disabled';
                } ?>
                onclick="$('#content').load('status.php');" />
        </td>
        <td>&nbsp;</td>
    <tr>
</table>
</div>

<div id="server_log" class="formDiv normalBorder" hidden>
    <p><i><?php echo _('Журнал последнего запуска:'); ?></i></p>
    <p>
    <?php if (!empty($log_tail)) {
        foreach (array_reverse($log_tail) as $line) {
            echo $line . '<br>';
        }
    } ?>
    </p>
</div>
<?php utils::showMessageBlocks($errors, $warnings, $info); ?>

<script>
    function submit_page(name, value) {
        var cfg_data=<?php echo $config->toJson(); ?>;
        cfg_data[name]=value;
        $.post("install.php", cfg_data, function(data) {
            $('#content').html(data);
        });
    }
    function activate() {
        var cfg_data=<?php echo $config->toJson(); ?>;
        $.post("activation.php", cfg_data, function(data) {
            $('#content').html(data);
        });
    }
    function show_log() {
        $('#server_log').toggle();
        $('#log_button').val($('#server_log').is(":hidden") ?
            "<?php echo _('Показать журнал сервера'); ?>" :
            "<?php echo _('Скрыть журнал сервера'); ?>");
    }
    window.onload = function(event) {
        if (!document.getElementById('content')) {
            window.location = 'index.php?page=install';
        }
    };
</script>
