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

use Symfony\Component\Console\Application;
use Turanct\Migraine\ClockNow;
use Turanct\Migraine\CommandMigrate;
use Turanct\Migraine\CommandNew;
use Turanct\Migraine\CommandSeed;
use Turanct\Migraine\CommandSkip;
use Turanct\Migraine\FilesystemSymfony;
use Turanct\Migraine\MigrateUp;
use Turanct\Migraine\NewSeed;
use Turanct\Migraine\SeedUp;
use Turanct\Migraine\Skip;
use Turanct\Migraine\NewMigration;

$ownAutoloader = __DIR__ . '/../vendor/autoload.php';
$appAutoloader = __DIR__ . '/../../../autoload.php';

if (file_exists($ownAutoloader)) {
    require $ownAutoloader;
} elseif (file_exists($appAutoloader)) {
    require $appAutoloader;
} else {
    die("No autoloader found.\n");
}

$application = new Application();

$currentWorkingDirectory = getcwd();

$translation = new \Turanct\Migraine\ConfigTranslationJson();
$configFromFile = new \Turanct\Migraine\GetConfigFromFile($translation, $currentWorkingDirectory, 'migrations.json');

$logs = new \Turanct\Migraine\LogsDispatch(
    [
        new \Turanct\Migraine\LogsJson(),
        new \Turanct\Migraine\LogsSQL(),
    ]
);

$filesystemSymfony = new Symfony\Component\Filesystem\Filesystem();
$filesystem = new FilesystemSymfony($filesystemSymfony);

$clock = new ClockNow();

$migrateUp = new MigrateUp($configFromFile, $logs, $clock);
$seedUp = new SeedUp($configFromFile, $logs, $clock);
$skip = new Skip($configFromFile, $logs, $clock);
$newMigration = new NewMigration($configFromFile, $filesystem, $clock);
$newSeed = new NewSeed($configFromFile, $filesystem, $clock);

$application->add(new CommandMigrate($migrateUp, $seedUp));
$application->add(new CommandSkip($skip));
$application->add(new CommandNew($newMigration, $newSeed));
$application->add(new CommandSeed($seedUp));

$application->run();
