<?php

use \Bitrix\Main\{
    Application,
    IO,
    Loader,
    ModuleManager,
    Config\Option
};

$_SERVER["DOCUMENT_ROOT"] = \realpath(__DIR__);
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];

\define("NO_KEEP_STATISTIC", true);
\define("NOT_CHECK_PERMISSIONS",true);
\define('CHK_EVENT', true);
\define("NO_AGENT_CHECK", true);
\define("LANGUAGE_ID", 'en');

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");

$application = Application::getInstance();
$connection = $application->getConnection();
$request = $application->getContext()->getRequest();

/**
 * Disable agents
 */
Option::set("main", "agents_use_crontab", "N");
Option::set("main", "check_agents", "N");
Option::set("main", "check_events", "N");

/**
 * Update init.php
 */
$initFile = new IO\File(Loader::getLocal('php_interface/init.php') ?: $application::getDocumentRoot() . '/local/php_interface/init.php');
if($initFile->isExists()){
    $initContent = $initFile->getContents();
    // dockerize not found
    if(\mb_strpos($initContent, "define('DOCKERIZE', true);") === false){
        $initContent = \trim($initContent);
        $initContent = \ltrim($initContent, '<?php');
        $initContent = \ltrim($initContent, '<?');
        $initContent = \rtrim($initContent, '?>');

        $initContent = "<" . "?php

\\define('DOCKERIZE', true);
" . $initContent . "
";

        $initFile->putContents($initContent);
    }
}
else{
    $initFile->putContents("<" . "?php

\\define('DOCKERIZE', true);
");
}

/**
 * Update dbconn.php
 */
$dbconnFile = new IO\File($application::getDocumentRoot() . '/bitrix/php_interface/dbconn.php');
if($dbconnFile->isExists()){
    $dbconnContent = $dbconnFile->getContents();

    $dbconnContent = \trim($dbconnContent);
    $dbconnContent = \str_replace(['?><?php', '?><?'], '', $dbconnContent);
    $dbconnContent = \ltrim($dbconnContent, '<?php');
    $dbconnContent = \ltrim($dbconnContent, '<?');
    $dbconnContent = \rtrim($dbconnContent, '?>');

    // Fix potential issue related to constant BX_CRONTAB_SUPPORT
    if(\mb_strpos($initContent, "BX_CRONTAB_SUPPORT") === false){
        $dbconnContent = \preg_replace('/( *)?define\(( *)?(\'|")BX_CRONTAB_SUPPORT(\'|")( *)?,( *)?(true|false)( *)?\)( *)?;/i', '', $dbconnContent);
    }

    $dbconnContent = \trim($dbconnContent);
    $dbconnContent = '<?' . "php\n" . $dbconnContent;

    $dbconnFile->putContents($dbconnContent);
}

/**
 * Uninstall compression module
 */
if(ModuleManager::isModuleInstalled('compression')){
    $compressionModuleInstaller = \CModule::CreateModuleObject('compression');
    $compressionModuleInstaller->UnInstallEvents();
    $compressionModuleInstaller->UnInstallFiles();
    $compressionModuleInstaller->UnInstallDB();
}

/**
 * Uninstall xmpp module
 */
if(ModuleManager::isModuleInstalled('xmpp')){
    $compressionModuleInstaller = \CModule::CreateModuleObject('xmpp');
    $compressionModuleInstaller->UnInstallEvents();
    $compressionModuleInstaller->UnInstallFiles();
    $compressionModuleInstaller->UnInstallDB();
}

/**
 * Uninstall webdav module
 */
if(ModuleManager::isModuleInstalled('webdav')){
    $webdavModuleInstaller = \CModule::CreateModuleObject('webdav');
    if($webdavModuleInstaller){
        $webdavModuleInstaller->UnInstallEvents();
        $webdavModuleInstaller->UnInstallFiles();
        $webdavModuleInstaller->UnInstallDB();
    }
}

/**
 * Delete useless modules
 */
(new IO\Directory($application::getDocumentRoot() . '/bitrix/modules/xmpp/'))->delete();
(new IO\Directory($application::getDocumentRoot() . '/bitrix/modules/cluster/'))->delete();
(new IO\Directory($application::getDocumentRoot() . '/bitrix/modules/compression/'))->delete();
(new IO\Directory($application::getDocumentRoot() . '/bitrix/modules/webdav/'))->delete();

/**
 * Update push&pull module settings
 */
Option::set('pull', 'push', 'N');
Option::set('pull', 'nginx', 'N');
Option::set('pull', 'websocket', 'N');
Option::set('pull', 'nginx_version', 2);
Option::set('pull', 'path_to_publish', 'http://nginx:8895/bitrix/pub/');
Option::set('pull', 'path_to_modern_listener', 'http://#DOMAIN#:8893/bitrix/sub/');
Option::set('pull', 'path_to_modern_listener_secure', 'https://#DOMAIN#:8894/bitrix/sub/');
Option::set('pull', 'path_to_listener', 'http://#DOMAIN#:8893/bitrix/sub/');
Option::set('pull', 'path_to_listener_secure', 'https://#DOMAIN#:8894/bitrix/sub/');
Option::set('pull', 'path_to_mobile_listener', 'http://#DOMAIN#:8893/bitrix/sub/');
Option::set('pull', 'path_to_mobile_listener_secure', 'https://#DOMAIN#:8894/bitrix/sub/');
Option::set('pull', 'path_to_websocket', 'ws://#DOMAIN#:8893/bitrix/subws/');
Option::set('pull', 'path_to_websocket_secure', 'wss://#DOMAIN#:8894/bitrix/subws/');

/**
 * Update main module settings
 */
Option::set('main', 'bx_fast_download', 'Y');
Option::set('main', 'session_expand', 'N');
Option::set('main', 'show_panel_for_users', \serialize([]));
Option::set('main', 'hide_panel_for_users', \serialize([]));
Option::set("main", "optimize_js_files", "N");
Option::set("main", "optimize_css_files", "N");

/**
 * Set website title based on GET parameter
 */
if($request->get('project_title')){
    $bitrixTitle = \htmlspecialcharsbx($request->get('project_title'));
    Option::set('main', 'site_name', $bitrixTitle);
    Option::set('main', 'site_name', $bitrixTitle, 's1');

    $templateHeader = new IO\File($application::getDocumentRoot() . '/bitrix/templates/login/header.php');
    $templateHeader->putContents($bitrixTitle, IO\File::APPEND);
}

/**
 * Delete installer
 */
$installFile = new IO\File(__FILE__);
$installFile->delete();

echo 'adjusted';
