from common import get_env_variable_required
from src.controller.angular_app import AngularApp
from src.controller.angular_lib import AngularLib
from src.controller.angular_seniorx import AngularSeniorX
from src.controller.app_base import AppBase
from src.controller.dotnet_app import DotnetApp
from src.controller.dotnet_lib import DotnetLib
from src.controller.flutter_app import FlutterApp
from src.controller.flutter_lib import FlutterLib
from src.controller.go_app import GoApp
from src.controller.go_lib import GoLib
from src.controller.maven_app import MavenApp
from src.controller.maven_lib import MavenLib
from src.controller.maven_sdl import MavenSDL
from src.controller.python_app import PythonApp
from src.controller.python_app_dpsi import PythonAppDpsi
from src.controller.python_app_sdp import PythonAppSdp
from src.controller.python_lib import PythonLib
from src.enum.project_type import ProjectTypeEnum


def get_project_controller_by_type():
    sci_project_type = get_env_variable_required("SCI_PROJECT_TYPE")
    project_type = ProjectTypeEnum[sci_project_type]

    project = None

    if project_type in [ProjectTypeEnum.MAVEN_SDL]:
        project = MavenSDL()
    elif project_type in [ProjectTypeEnum.MAVEN_APP]:
        project = MavenApp()
    elif project_type in [ProjectTypeEnum.MAVEN_LIB]:
        project = MavenLib()
    elif project_type in [ProjectTypeEnum.APP_BASE]:
        project = AppBase()
    elif project_type in [
        ProjectTypeEnum.ANGULAR_SENIORX,
        ProjectTypeEnum.ANGULAR_GENERATED,
    ]:
        project = AngularSeniorX()
    elif project_type in [ProjectTypeEnum.ANGULAR_APP]:
        project = AngularApp()
    elif project_type in [ProjectTypeEnum.ANGULAR_LIB]:
        project = AngularLib()
    elif project_type in [ProjectTypeEnum.DOTNET_APP]:
        project = DotnetApp()
    elif project_type in [ProjectTypeEnum.DOTNET_LIB]:
        project = DotnetLib()
    elif project_type in [ProjectTypeEnum.FLUTTER_APP]:
        project = FlutterApp()
    elif project_type in [ProjectTypeEnum.FLUTTER_LIB]:
        project = FlutterLib()
    elif project_type in [ProjectTypeEnum.GO_APP]:
        project = GoApp()
    elif project_type in [ProjectTypeEnum.GO_LIB]:
        project = GoLib()
    elif project_type in [ProjectTypeEnum.PYTHON_LIB]:
        project = PythonLib()
    elif project_type in [ProjectTypeEnum.PYTHON_APP_DPSI]:
        project = PythonAppDpsi()
    elif project_type in [ProjectTypeEnum.PYTHON_APP_SDP]:
        project = PythonAppSdp()
    elif project_type in [ProjectTypeEnum.PYTHON_APP]:
        project = PythonApp()
    return project
