#!/usr/bin/env php
<?php

use Dotenv\Dotenv;
use Diswebru\BitrixMigrations\Commands\ArchiveCommand;
use Diswebru\BitrixMigrations\Commands\MakeCommand;
use Diswebru\BitrixMigrations\Commands\InstallCommand;
use Diswebru\BitrixMigrations\Commands\MigrateCommand;
use Diswebru\BitrixMigrations\Commands\RollbackCommand;
use Diswebru\BitrixMigrations\Commands\TemplatesCommand;
use Diswebru\BitrixMigrations\Commands\StatusCommand;
use Diswebru\BitrixMigrations\Constructors\IBlock;
use Diswebru\BitrixMigrations\Migrator;
use Diswebru\BitrixMigrations\Storages\BitrixDatabaseStorage;
use Diswebru\BitrixMigrations\TemplatesCollection;
use Symfony\Component\Console\Application;

define("NO_KEEP_STATISTIC", true);
define('NO_AGENT_CHECK', true);
define("NOT_CHECK_PERMISSIONS", true);

require_once __DIR__ . '/vendor/autoload.php';

Dotenv::createImmutable(__DIR__)->load();

$_SERVER["DOCUMENT_ROOT"] = $_ENV['BX_MIGRATION_DOC_ROOT'] ?? __DIR__;
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php";

CModule::IncludeModule("iblock");

$config = [
    'table' => 'migrations',
    'dir' => './migrations',
    // 'dir_archive' => 'archive', // not required. default = "archive"
    'use_transaction' => true, // not required. default = false
    'default_fields' => [
        IBlock::class => [
            'INDEX_ELEMENT' => 'N',
            'INDEX_SECTION' => 'N',
            'VERSION' => 2,
            'SITE_ID' => 's1',
        ]
    ]
];

$database = new BitrixDatabaseStorage($config['table']);
$templates = new TemplatesCollection();
$templates->registerBasicTemplates();

$migrator = new Migrator($config, $templates, $database);

$app = new Application('Migrator');
$app->add(new MakeCommand($migrator));
$app->add(new InstallCommand($config['table'], $database));
$app->add(new MigrateCommand($migrator));
$app->add(new RollbackCommand($migrator));
$app->add(new TemplatesCommand($templates));
$app->add(new StatusCommand($migrator));
$app->add(new ArchiveCommand($migrator));
$app->run();
