from aws_prototyping_sdk.pipeline import PDKPipeline, SonarCodeScannerConfig
from aws_cdk import Stack, pipelines
import json
import humps

class PipelineStack(Stack):
    def __init__(self, scope, id, **kwargs):
        super().__init__(scope, id, **kwargs)

        context = self.node.try_get_context("sonarqubeScannerConfig")
        repo_name = self.node.try_get_context("repositoryName")
        default_branch_name = self.node.try_get_context("defaultBranchName")
        sonar_config = None

        if repo_name is None:
            repo_name = "monorepo"
        
        if default_branch_name is None:
            default_branch_name = PDKPipeline.DEFAULT_BRANCH_NAME

        if context is not None:
            sonar_config = SonarCodeScannerConfig(**json.loads(json.dumps(humps.decamelize(context))))

        self.pipeline = PDKPipeline(self, "Pipeline",
                                                 primary_synth_directory="packages/infra/cdk.out",
                                                 repository_name=repo_name,
                                                 default_branch_name=default_branch_name,
                                                 publish_assets_in_parallel=False,
                                                 cross_account_keys=True,
                                                 sonar_code_scanner_config=sonar_config,
                                                 synth=pipelines.ShellStep("Unused", commands=[]))