<?php

namespace Xentral\Modules\Country;

use Xentral\Core\DependencyInjection\ContainerInterface;
use Xentral\Modules\Country\Gateway\CountryGateway;
use Xentral\Modules\Country\Gateway\StateGateway;
use Xentral\Modules\Country\Service\CountryMigrationService;
use Xentral\Modules\Country\Service\CountryService;

final class Bootstrap
{
    /**
     * @return array
     */
    public static function registerServices()
    {
        return [
            'CountryGateway'          => 'onInitCountryGateway',
            'CountryService'          => 'onInitCountryService',
            'CountryMigrationService' => 'onInitCountryMigrationService',
            StateGateway::class       => 'onInitStateGateway',
        ];
    }

    /**
     * @param ContainerInterface $container
     *
     * @return CountryGateway
     */
    public static function onInitCountryGateway(ContainerInterface $container)
    {
        return new CountryGateway($container->get('Database'));
    }

    /**
     * @param ContainerInterface $container
     *
     * @return CountryService
     */
    public static function onInitCountryService(ContainerInterface $container)
    {
        return new CountryService($container->get('CountryGateway'), $container->get('Database'));
    }

    /**
     * @param ContainerInterface $container
     *
     * @return CountryMigrationService
     */
    public static function onInitCountryMigrationService(ContainerInterface $container)
    {
        return new CountryMigrationService($container->get('Database'));
    }

    /**
     * @param ContainerInterface $container
     *
     * @return StateGateway
     */
    public static function onInitStateGateway(ContainerInterface $container): StateGateway
    {
        return new StateGateway($container->get('Database'));
    }
}