from PytorchBoot.utils.log_util import Log

application_class = {}
def PytorchBootApplication(arg=None):
    if callable(arg):
        cls = arg
        if "default" in application_class:
            Log.error("Multiple classes annotated with default @PytorchBootApplication, require a 'name' parameter.", True)
        application_class["default"] = cls
        return cls
    
    else:
        name = arg
        def decorator(cls):
            if name is None:
                raise Log.error("The 'name' parameter is required when using @PytorchBootApplication with arguments.", True)
            if name in application_class:
                raise Log.error(f"Multiple classes annotated with @PytorchBootApplication with the same name '{name}' found.", True)
            application_class[name] = cls
            return cls
        return decorator
