<?php

namespace common\logic\Subscription\Subscription\Module;

use common\logic\AbstractModule;
use common\logic\Subscription\Subscription\Repository\SubscriptionRepository;
use common\logic\Subscription\Subscription\Service\OrderManager;
use common\logic\Subscription\Subscription\Service\SubscriptionBuilder;
use common\logic\Subscription\Subscription\Service\SubscriptionDefinition;
use common\logic\Subscription\Subscription\Service\SubscriptionSolver;

/**
 * @mixin SubscriptionDefinition
 * @mixin SubscriptionSolver
 * @mixin SubscriptionRepository
 * @mixin SubscriptionBuilder
 * @mixin OrderManager
 */
class SubscriptionModule extends AbstractModule
{
    public function getServices(): array
    {
        return [
            SubscriptionDefinition::class,
            SubscriptionSolver::class,
            SubscriptionRepository::class,
            SubscriptionBuilder::class,
            OrderManager::class,
        ];
    }

    public function getDefinition(): SubscriptionDefinition
    {
        return SubscriptionDefinition::getInstance();
    }

    public function getSolver(): SubscriptionSolver
    {
        return SubscriptionSolver::getInstance();
    }

    public function getRepository(): SubscriptionRepository
    {
        return SubscriptionRepository::getInstance();
    }

    public function getBuilder(): SubscriptionBuilder
    {
        return SubscriptionBuilder::getInstance();
    }

    public function getOrderManager(): OrderManager
    {
        return OrderManager::getInstance();
    }
}