from oscar.core.loading import get_class, get_classes

OrderReportGenerator = get_class("order.reports", "OrderReportGenerator")
ProductReportGenerator, UserReportGenerator = get_classes(
    "analytics.reports", ["ProductReportGenerator", "UserReportGenerator"]
)
OpenBasketReportGenerator, SubmittedBasketReportGenerator = get_classes(
    "basket.reports", ["OpenBasketReportGenerator", "SubmittedBasketReportGenerator"]
)
OfferReportGenerator = get_class("offer.reports", "OfferReportGenerator")
VoucherReportGenerator = get_class("voucher.reports", "VoucherReportGenerator")


class GeneratorRepository(object):
    generators = [
        OrderReportGenerator,
        ProductReportGenerator,
        UserReportGenerator,
        OpenBasketReportGenerator,
        SubmittedBasketReportGenerator,
        VoucherReportGenerator,
        OfferReportGenerator,
    ]

    def get_report_generators(self):
        return self.generators

    def get_generator(self, code):
        for generator in self.generators:
            if generator.code == code:
                return generator
        return None
