@Library('jenkins-shared-library') _
pipeline {
    agent {
        label 'jenkins-slave'
    }
    environment {
        DEBIAN_FRONTEND = 'noninteractive'
        DEFAULT_DEV_NAME = 'Opengnsys Team'
        DEFAULT_DEV_EMAIL = 'opengnsys@qindel.com'
    }
    options {
        skipDefaultCheckout()
    }
    parameters {
        string(name: 'DEV_NAME', defaultValue: '', description: 'Nombre del desarrollador')
        string(name: 'DEV_EMAIL', defaultValue: '', description: 'Email del desarrollador')
    }
    stages {
        stage('Prepare Workspace') {
            steps {
                script {
                    env.BUILD_DIR = "${WORKSPACE}/ogagent"
                    sh "mkdir -p ${env.BUILD_DIR}"
                    sh "mkdir -p ${env.BUILD_DIR}/debian"
                }
            }
        }

        stage('Checkout') {
            steps {
                dir("${env.BUILD_DIR}") {
                    checkout scm
                }
            }
        }

        stage('Generate Changelog') {
            when {
                expression {
                    return env.TAG_NAME != null
                }
            }
            steps {
                script {
                    def devName = params.DEV_NAME ? params.DEV_NAME : env.DEFAULT_DEV_NAME
                    def devEmail = params.DEV_EMAIL ? params.DEV_EMAIL : env.DEFAULT_DEV_EMAIL
                    generateDebianChangelog(env.BUILD_DIR, devName, devEmail)
                    sh "mkdir -p ${env.BUILD_DIR}/debian/"
                    sh "cp ${env.BUILD_DIR}/debian/changelog ${env.BUILD_DIR}/linux/debian/"
                }
            }
        }
        stage('Generate Changelog (Nightly)'){
            when {
                anyOf {
                    branch 'main'
                    branch 'jenkins'
                }
            }
            steps {
                script {
                    def devName = params.DEV_NAME ? params.DEV_NAME : env.DEFAULT_DEV_NAME
                    def devEmail = params.DEV_EMAIL ? params.DEV_EMAIL : env.DEFAULT_DEV_EMAIL
                    generateDebianChangelog(env.BUILD_DIR, devName, devEmail,'nightly')
                    sh "mkdir -p ${env.BUILD_DIR}/debian/"
                    sh "cp ${env.BUILD_DIR}/debian/changelog ${env.BUILD_DIR}/linux/debian/"
                }
            }
        }
        stage('Build') {
            steps {
                dir ("${env.BUILD_DIR}") {
                    script {
                        sh '''
                        V=$(grep -E "^## \\[[0-9]+\\.[0-9]+\\.[0-9]+" CHANGELOG.md | head -1 | \
                        cut -d'[' -f2 | cut -d']' -f1)
                        echo "V=$V" >src/VERSION
                        echo "Versión extraída: $V"
                        src/update.py
                        git checkout -- src/about-dialog.ui src/opengnsys/__init__.py
                        '''
                    construirPaquete("${env.BUILD_DIR}/linux", "../artifacts", "172.17.8.68", "/var/tmp/opengnsys/debian-repo/ogagent")
                    }
                }
            }
        }
        stage ('Publish to Debian Repository') {
            when {
                expression {
                    return env.TAG_NAME != null
                }
            }
            agent { label 'debian-repo' }
            steps {
               script {
                    // Construir el patrón de versión esperado en el nombre del paquete
                    def versionPattern = "${env.TAG_NAME}-${env.BUILD_NUMBER}"
                    publicarEnAptly('/var/tmp/opengnsys/debian-repo/ogagent', 'opengnsys-devel', versionPattern)
                }
            }
        }
        stage ('Publish to Debian Repository (Nightly)') {
            when {
                branch 'main'
            }
            agent { label 'debian-repo' }
            steps {
               script {
                    // Construir el patrón de versión esperado en el nombre del paquete
                    def versionPattern = "-${env.BUILD_NUMBER}~nightly"
                    publicarEnAptly('/var/tmp/opengnsys/debian-repo/ogagent', 'nightly', versionPattern)
                }
            }
        }
    }
    post {
        always {
            notifyBuildStatus('narenas@qindel.com')
        }
    }
}
