<?php

namespace Acms\Services\Installer;

use Acms\Contracts\ServiceProvider;
use Acms\Services\Container;
use Acms\Services\Facades\Application;

/**
 * Installer サービスを DI コンテナに登録する
 *
 * Container エイリアス:
 *   - installer           : Installer 本体 (上位 orchestrator)
 *   - installer.sequence  : SequenceInitializer
 *   - installer.admin-user: AdminUserFactory
 *   - installer.schema    : SchemaCreator
 *
 * 呼び出し例:
 *   $installer = Application::make('installer');
 *   $result = $installer->install($options, $logger);
 */
class InstallerServiceProvider extends ServiceProvider
{
    public function register(Container $container)
    {
        $container->singleton('installer.sequence', function () {
            return new SequenceInitializer();
        });
        $container->singleton('installer.admin-user', function () {
            return new AdminUserFactory();
        });
        $container->singleton('installer.schema', function () {
            return new SchemaCreator();
        });
        $container->singleton('installer', function () use ($container) {
            // Installer 内部で blog → user → bin の順に組み立てるため、低レベル部品
            // (Seeder / PathResolver) を直接使う。blog レコードの INSERT ロジックと
            // MultiBlogImport は Installer 自身に閉じ込めているので渡さない。
            /** @var \Acms\Services\SiteSeed\SiteSeeder $seeder */
            $seeder = $container->make('site.seed');
            return new Installer(
                $container->make('installer.sequence'),
                $container->make('installer.admin-user'),
                $seeder,
                $seeder->paths(),
                $container->make('installer.schema'),
            );
        });
    }

    public function init()
    {
    }
}
