#!/usr/bin/env php
<?php
// 1) Composer autoload
require __DIR__ . '/../vendor/autoload.php';

// 2) Определяем DOCUMENT_ROOT, где лежит папка /bitrix
$projectRoot = realpath(__DIR__ . '/..'); // .../rest1c
$candidates = array_filter([
    getenv('BITRIX_DOCROOT') ?: null,     // можно задать явно через переменную окружения
    realpath($projectRoot . '/..'),       // на уровень выше проекта (обычно .../www)
    '/home/bitrix/www',
    '/var/bitrix/www',
]);

foreach ($candidates as $docRoot) {
    $prolog = rtrim($docRoot, '/').'/bitrix/modules/main/include/prolog_before.php';
    if (is_file($prolog)) {
        $_SERVER['DOCUMENT_ROOT'] = $docRoot;
        break;
    }
}

if (empty($_SERVER['DOCUMENT_ROOT'])) {
    fwrite(STDERR, "Не удалось найти Bitrix DOCROOT. Задайте BITRIX_DOCROOT или проверьте структуру каталогов.\n");
    exit(1);
}

// 3) Флаги для CLI
if (!defined('NO_KEEP_STATISTIC')) define('NO_KEEP_STATISTIC', 'Y');
if (!defined('NOT_CHECK_PERMISSIONS')) define('NOT_CHECK_PERMISSIONS', true);
if (!defined('BX_CRONTAB')) define('BX_CRONTAB', true);

// 4) Грузим ядро Bitrix
require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php';

// 4.1) Подключаем общий фасад legacy-функций rest1c, как и в HTTP entrypoints.
require_once $projectRoot . '/functions.php';

// 5) Запускаем приложение консоли
use Symfony\Component\Console\Application;
use Ecobalt\Project\Command\BitrixBuildProjectionPlanCommand;
use Ecobalt\Project\Command\BitrixExportPublicationStateCommand;
use Ecobalt\Project\Command\BitrixExportCanonicalSnapshotCommand;
use Ecobalt\Project\Command\CatalogImagesCheckCommand;
use Ecobalt\Project\Command\MiniDbShadowCompareCommand;
use Ecobalt\Project\Command\MiniDbExportCanonicalSnapshotCommand;
use Ecobalt\Project\Command\MiniDbExportPublicationStateCommand;
use Ecobalt\Project\Command\MiniDbIngestCatalogBatchCommand;
use Ecobalt\Project\Command\MiniDbPublishOutboxCommand;
use Ecobalt\Project\Command\MiniDbRebuildPublicationDecisionsCommand;
use Ecobalt\Project\Command\MiniDbSchemaInitCommand;
use Ecobalt\Project\Command\CatalogPublishSiteCountMetricsCommand;
use Ecobalt\Project\Command\CatalogProductDataCheckCommand;
use Ecobalt\Project\Command\CatalogSectionSourceCheckCommand;
use Ecobalt\Project\Command\OrdersStatusDaemonCommand;
use Ecobalt\Project\Command\ProductCatalogRepairCommand;
use Ecobalt\Project\Command\ResetManagerPasswordsCommand;
use Ecobalt\Project\Command\ResetUserPasswordsCommand;
use Ecobalt\Project\Command\SetUserPasswordsFromFileCommand;

$application = new Application();
$application->add(new BitrixBuildProjectionPlanCommand());
$application->add(new BitrixExportCanonicalSnapshotCommand());
$application->add(new BitrixExportPublicationStateCommand());
$application->add(new CatalogImagesCheckCommand());
$application->add(new MiniDbShadowCompareCommand());
$application->add(new MiniDbExportCanonicalSnapshotCommand());
$application->add(new MiniDbExportPublicationStateCommand());
$application->add(new MiniDbIngestCatalogBatchCommand());
$application->add(new MiniDbPublishOutboxCommand());
$application->add(new MiniDbRebuildPublicationDecisionsCommand());
$application->add(new MiniDbSchemaInitCommand());
$application->add(new CatalogPublishSiteCountMetricsCommand());
$application->add(new CatalogProductDataCheckCommand());
$application->add(new CatalogSectionSourceCheckCommand());
$application->add(new ProductCatalogRepairCommand());
$application->add(new ResetManagerPasswordsCommand());
$application->add(new ResetUserPasswordsCommand());
$application->add(new SetUserPasswordsFromFileCommand());
$application->add(new OrdersStatusDaemonCommand());
$application->run();
    
