pipeline {
    agent any
    environment {
        APP    = '/opt/guardia/app'
        VENV   = '/opt/guardia/venv'
        NOTIFY = "${ITSM_BASE_URL}/api/messenger/webhook"
    }
    options {
        buildDiscarder(logRotator(numToKeepStr: '5'))
        timeout(time: 15, unit: 'MINUTES')
        timestamps()
    }
    stages {
        stage('Checkout') { steps { checkout scm } }
        stage('Install') {
            steps { sh "${VENV}/bin/pip install -r requirements.txt -q" }
        }
        stage('Test') {
            when { expression { fileExists('tests/') } }
            steps {
                sh "${VENV}/bin/pytest tests/ -q --tb=short --junitxml=test-results.xml || true"
                junit allowEmptyResults: true, testResults: 'test-results.xml'
            }
        }
        stage('Deploy') {
            when { branch 'main' }
            steps {
                sh """
                    rsync -a --exclude=__pycache__ --exclude=.git \
                          --exclude=rpa_rules.json --exclude='*.pyc' \
                          . ${APP}/
                    systemctl restart guardia
                    sleep 4
                    systemctl is-active guardia || exit 1
                """
            }
        }
    }
    post {
        success { sh "curl -sf -X POST ${NOTIFY} -H 'Content-Type:application/json' -d '{\"event\":\"build_result\",\"room\":\"ops\",\"success\":true,\"result_summary\":\"✅ guardia-itsm 배포 완료 #${BUILD_NUMBER}\"}' 2>/dev/null || true" }
        failure { sh "curl -sf -X POST ${NOTIFY} -H 'Content-Type:application/json' -d '{\"event\":\"build_result\",\"room\":\"ops\",\"success\":false,\"result_summary\":\"❌ guardia-itsm 빌드 실패 #${BUILD_NUMBER}\"}' 2>/dev/null || true" }
    }
}