<?php

namespace domain\Distribution\Distribution;

use domain\Distribution\Distribution\Export\DistributionReport2CsvGenerator;
use domain\Distribution\Distribution\Export\DistributionReportCsvGenerator;
use domain\Distribution\Distribution\Export\DistributionReportGridPdfGenerator;
use domain\Distribution\Distribution\Export\DistributionReportPdfGenerator;
use domain\Distribution\Distribution\Export\DistributionReportTotalProductCsvGenerator;
use domain\Distribution\Distribution\Export\DistributionShoppingCartLabelsPdfGenerator;
use domain\_\AbstractModule;

class DistributionModule extends AbstractModule
{
    public function getServices(): array
    {
        return [
            DistributionDefinition::class,
            DistributionSolver::class,
            DistributionRepository::class,
            DistributionBuilder::class,

            ExportManager::class,
            DistributionReport2CsvGenerator::class,
            DistributionReportCsvGenerator::class,
            DistributionReportGridPdfGenerator::class,
            DistributionReportPdfGenerator::class,
            DistributionReportTotalProductCsvGenerator::class,
            DistributionShoppingCartLabelsPdfGenerator::class
        ];
    }

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

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

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

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

    public function getExportManager(): ExportManager
    {
        return ExportManager::getInstance();
    }
}