from typing import Type

from evibes.utils.misc import create_object
from payments.gateways import AbstractGateway
from payments.models import Gateway


def get_gateways_integrations(name: str | None = None) -> list[Type[AbstractGateway]]:
    gateways_integrations: list[Type[AbstractGateway]] = []
    gateways = Gateway.objects.filter(is_active=True, name=name) if name else Gateway.objects.filter(is_active=True)
    for gateway in gateways:
        if gateway.integration_path:
            module_name = ".".join(gateway.integration_path.split(".")[:-1])
            class_name = gateway.integration_path.split(".")[-1]
            gateways_integrations.append(create_object(module_name, class_name))
    return gateways_integrations
