<?php

namespace common\logic\Document\Invoice\Module;

use common\logic\Document\Document\Module\DocumentModule;
use common\logic\Document\Invoice\Repository\InvoiceRepository;
use common\logic\Document\Invoice\Service\InvoiceBuilder;
use common\logic\Document\Invoice\Service\InvoiceDefinition;
use common\logic\Document\Invoice\Service\InvoiceSolver;

/**
 * @mixin InvoiceDefinition
 * @mixin InvoiceSolver
 * @mixin InvoiceRepository
 * @mixin InvoiceBuilder
 */
class InvoiceModule extends DocumentModule
{
    public function getServices(): array
    {
        return [
            InvoiceDefinition::class,
            InvoiceSolver::class,
            InvoiceRepository::class,
            InvoiceBuilder::class,
        ];
    }

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

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

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

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