from cpl_cli.abc.code_file_template_abc import CodeFileTemplateABC


class ProjectFileApplication(CodeFileTemplateABC):
    def __init__(
        self, path: str, use_application_api: bool, use_startup: bool, use_service_providing: bool, use_async: bool
    ):
        CodeFileTemplateABC.__init__(
            self, "application", path, "", use_application_api, use_startup, use_service_providing, use_async
        )

    def get_code(self) -> str:
        import textwrap

        if self._use_async:
            return textwrap.dedent(
                """\
            from cpl_core.application import ApplicationABC
            from cpl_core.configuration import ConfigurationABC
            from cpl_core.console import Console
            from cpl_core.dependency_injection import ServiceProviderABC
                    
                    
            class Application(ApplicationABC):
                
                def __init__(self, config: ConfigurationABC, services: ServiceProviderABC):
                    ApplicationABC.__init__(self, config, services)
                
                async def configure(self):
                    pass
                
                async def main(self):
                    Console.write_line('Hello World')
            """
            )

        return textwrap.dedent(
            """\
        from cpl_core.application import ApplicationABC
        from cpl_core.configuration import ConfigurationABC
        from cpl_core.console import Console
        from cpl_core.dependency_injection import ServiceProviderABC
                    
                    
        class Application(ApplicationABC):
                
            def __init__(self, config: ConfigurationABC, services: ServiceProviderABC):
                ApplicationABC.__init__(self, config, services)
                
            def configure(self):
                pass
                
            def main(self):
                Console.write_line('Hello World')
        """
        )
