def main(ctx):
  commit_message = ctx.build.message.lower()
  if "readme.md" in commit_message or "[no_ci]" in commit_message:
    return nullPipeline()
  
  if "[db]" in commit_message:
    return [
        ci(ctx),
        cd(ctx),
        db(ctx)
    ]
  else :
    return [
        ci(ctx),
        cd(ctx),
    ]

def nullPipeline():
  return {
    "kind": "pipeline",
    "name": "Nothing",
    "steps": []
  }

def ci(ctx):
  CI = {
    "kind": "pipeline",
    "name": "CI",
    "steps": [
      {
        "name": "compilation",
        "image": "maven:3-openjdk-11",
        "commands": [
            "cd Sources",
            "mvn clean package",
        ]
      },
      {
        "name": "code-analysis",
        "image": "openjdk:8-jdk",
        "commands": [
            "export SONAR_SCANNER_VERSION=4.7.0.2747",
            "export SONAR_SCANNER_HOME=$HOME/.sonar/sonar-scanner-$SONAR_SCANNER_VERSION-linux",
            "curl --create-dirs -sSLo $HOME/.sonar/sonar-scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-$SONAR_SCANNER_VERSION-linux.zip",
            "unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/",
            "export PATH=$SONAR_SCANNER_HOME/bin:$PATH",
            "export SONAR_SCANNER_OPTS=\"-server\"",
            "sonar-scanner -D sonar.projectKey=Api-Allin -D sonar.sources=./Sources -D sonar.host.url=https://codefirst.iut.uca.fr/sonar",
        ],
        "settings": {
          "sources": "./src/",
        },
        "environment": {
          "SONAR_TOKEN": {"from_secret": "SECRET_TOKEN"},
        },
      }
    ]
  }
  return CI

def cd(ctx):
    CD = {
        "kind": "pipeline",
        "name": "CD",
        "volumes": [
            {
                "name": "images",
                "temp": {}
            }
        ],
        "steps": [
            {
                "name": "hadolint",
                "image": "hadolint/hadolint:latest-alpine",
                "commands": [
                    "hadolint Sources/Dockerfile"
                ]
            },
            {
                "name": "docker-image",
                "image": "plugins/docker",
                "settings": {
                    "dockerfile": "Sources/Dockerfile",
                    "context": "Sources",
                    "registry": "hub.codefirst.iut.uca.fr",
                    "repo": "hub.codefirst.iut.uca.fr/lucas.evard/api",
                    "username": {"from_secret": "SECRET_REGISTRY_USERNAME"},
                    "password": {"from_secret": "SECRET_REGISTRY_PASSWORD"}
                }
            },
            {
                "name": "deploy-container",
                "image": "hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest",
                "environment": {
                    "CODEFIRST_CLIENTDRONE_ENV_DATA_SOURCE": "postgres",
                    "CODEFIRST_CLIENTDRONE_ENV_CODEFIRST_CONTAINER": {"from_secret": "CODEFIRST_CONTAINER"},
                    "CODEFIRST_CLIENTDRONE_ENV_POSTGRES_DB": {"from_secret": "db_database"},
                    "CODEFIRST_CLIENTDRONE_ENV_POSTGRES_USER": {"from_secret": "db_user"},
                    "CODEFIRST_CLIENTDRONE_ENV_POSTGRES_PASSWORD": {"from_secret": "db_password"},
                    "CODEFIRST_CLIENTDRONE_ENV_POSTGRES_HOST": {"from_secret": "db_host"},
                    "CODEFIRST_CLIENTDRONE_ENV_SALT": {"from_secret": "SALT"},
                    "ADMINS": "lucasevard,emrekartal,arthurvalin,lucasdelanier",
                    "IMAGENAME": "hub.codefirst.iut.uca.fr/lucas.evard/api:latest",
                    "CONTAINERNAME": "api",
                    "COMMAND": "create",
                    "OVERWRITE": "true",
                },
                "depends_on": [
                    "docker-image"
                ],
                "volumes": [
                    {
                        "name": "images",
                        "path": "/uploads"
                    }
                ]
            }
        ]
    }

    return CD

    
def db(ctx):
  DB = {
    "kind": "pipeline",
    "name": "DB",
    "steps": [
      {
        "name": "deploy-container-postgres",
        "image": "hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest",
        "environment": {
          "IMAGENAME": "postgres:latest",
          "CONTAINERNAME": "postgresapi",
          "COMMAND": "create",
          "OVERWRITE": "false",
          "PRIVATE": "false",
          "ADMINS": "lucasevard,emrekartal,arthurvalin,lucasdelanier",
          "CODEFIRST_CLIENTDRONE_ENV_POSTGRES_ROOT_PASSWORD": {"from_secret": "db_root_password"},
          "CODEFIRST_CLIENTDRONE_ENV_POSTGRES_DB": {"from_secret": "db_database"},
          "CODEFIRST_CLIENTDRONE_ENV_POSTGRES_USER": {"from_secret": "db_user"},
          "CODEFIRST_CLIENTDRONE_ENV_POSTGRES_PASSWORD": {"from_secret": "db_password"}
        }
      }
    ]
  }
  return DB