<?php

namespace common\logic\Payment\Module;

use common\logic\AbstractModule;
use common\logic\Payment\Repository\PaymentRepository;
use common\logic\Payment\Service\PaymentNotifier;
use common\logic\Payment\Service\PaymentManager;
use common\logic\Payment\Service\PaymentBuilder;
use common\logic\Payment\Service\PaymentDefinition;
use common\logic\Payment\Service\PaymentSolver;

/**
 * @mixin PaymentDefinition
 * @mixin PaymentSolver
 * @mixin PaymentRepository
 * @mixin PaymentBuilder
 * @mixin PaymentManager
 */
class PaymentModule extends AbstractModule
{
    public function getServices(): array
    {
        return [
            PaymentDefinition::class,
            PaymentSolver::class,
            PaymentBuilder::class,
            PaymentRepository::class,
            PaymentNotifier::class,
            PaymentManager::class,
        ];
    }

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

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

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

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

    public function getNotifier(): PaymentNotifier
    {
        return PaymentNotifier::getInstance();
    }

    public function getManager(): PaymentManager
    {
        return PaymentManager::getInstance();
    }
}