/* groovylint-disable CompileStatic, DuplicateStringLiteral, LineLength, NestedBlockDepth */
pipeline {
    agent any
    parameters {
        string(name: 'LTS_CODENAME', description: 'The name of the LTS of this IV (ex: orion)', trim: true)
        string(name: 'VERSION_TO_SET', description: 'The numeric version of the LTS to set in all project (ex: 2025.10.00)')
        choice(name: 'ITERATION_TYPE', choices: ['FIRST_IV', 'IV', 'LTS'], description: 'Select the type of release')
    }
    environment {
        IS_CURRENT_LTS_RELEASED = false
    }
    stages {
        stage('Update variable IS_CURRENT_LTS_RELEASED') {
            steps {
                script {
                    switch (params.ITERATION_TYPE) {
                        case 'FIRST_IV':
                            echo 'FIRST IV gonna update lts table'
                            build(
                                job: 'update-xivo-ci-job',
                                parameters: [
                                    string(name: 'NEW_LTS_CODENAME', value: LTS_CODENAME),
                                    booleanParam(name: 'IS_CURRENT_LTS_RELEASED', value: env.IS_CURRENT_LTS_RELEASED)
                                ]
                            )
                            echo 'IS_CURRENT_LTS_RELEASED set to false because FIRST_IV'
                            break
                        case 'LTS':
                            env.IS_CURRENT_LTS_RELEASED = true
                            echo 'IS_CURRENT_LTS_RELEASED set to true because LTS'
                            build(
                                job: 'update-xivo-ci-job',
                                parameters: [
                                    string(name: 'NEW_LTS_CODENAME', value: LTS_CODENAME),
                                    booleanParam(name: 'IS_CURRENT_LTS_RELEASED', value: env.IS_CURRENT_LTS_RELEASED)
                                ]
                            )
                            break
                        case 'IV':
                            echo 'No change to IS_CURRENT_LTS_RELEASED because ITERATION_TYPE is IV'
                            break
                        default:
                            echo 'Unknown ITERATION_TYPE: no change'
                    }
                }
            }
        }
        stage('Bump all project version') {
            steps {
                build(
                    job: 'set-all-project-version',
                    parameters: [
                        booleanParam(name: 'LTS', value: env.IS_CURRENT_LTS_RELEASED),
                        string(name: 'VERSION', value: VERSION_TO_SET),
                        string(name: 'BRANCH', value: 'master'),
                        string(name: 'MM_BRANCH', value: 'xivo-master'),
                        string(name: 'CODENAME', value: LTS_CODENAME),
                    ]
                )
            }
        }
        stage('Build xivo package') {
            steps {
                build(
                    job: 'xivo',
                    parameters: [
                        string(name: 'BRANCH_OR_TAG', value: 'master'),
                        string(name: 'BUILD_TYPE', value: 'dev'),
                    ]
                )
            }
        }
        stage('Build xivocc installer package') {
            steps {
                build(
                    job: 'xivocc-installer',
                    parameters: [
                        string(name: 'BRANCH_OR_TAG', value: 'master'),
                        string(name: 'BUILD_TYPE', value: 'dev'),
                    ]
                )
            }
        }
        stage('Build dev containers') {
            steps {
                build(
                    job: 'build-all-docker-images',
                    parameters: [
                        string(name: 'BRANCH_OR_TAG', value: 'master'),
                        string(name: 'MM_BRANCH', value: 'xivo-master'),
                        string(name: 'BUILD_TYPE', value: 'dev'),
                    ]
                )
            }
        }
    }
}
