pipeline {
    agent any

    environment {
        APP_DIR   = '/opt/guardia/app'
        VENV      = '/opt/guardia/venv'
        SERVICE   = 'guardia'
        GITEA_URL = 'http://localhost:3000/zio/guardia-itsm.git'
    }

    options {
        buildDiscarder(logRotator(numToKeepStr: '5'))
        timeout(time: 15, unit: 'MINUTES')
    }

    stages {
        stage('Checkout') {
            steps {
                echo "체크아웃: ${env.GIT_BRANCH ?: 'main'}"
                checkout scm
            }
        }

        stage('Python Lint') {
            steps {
                sh '''
                    echo "=== Python 문법 검사 ==="
                    python3 -m py_compile main.py models.py database.py
                    find routers/ -name "*.py" -exec python3 -m py_compile {} \\;
                    find core/ -name "*.py" -exec python3 -m py_compile {} \\;
                    echo "문법 검사 통과"
                '''
            }
        }

        stage('Install Dependencies') {
            steps {
                sh '${VENV}/bin/pip install -r requirements.txt -q && echo "의존성 OK"'
            }
        }

        stage('Health Check') {
            steps {
                sh '''
                    if systemctl is-active ${SERVICE} >/dev/null 2>&1; then
                        HTTP=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8001/docs)
                        echo "현재 서비스 HTTP: $HTTP"
                    else
                        echo "서비스 미실행"
                    fi
                '''
            }
        }

        stage('Deploy') {
            when { branch 'main' }
            steps {
                sh '''
                    echo "=== GUARDiA ITSM 배포 ==="
                    # 백업
                    BACKUP=/opt/guardia/backups/$(date +%Y%m%d_%H%M%S)
                    mkdir -p $BACKUP
                    cp -r ${APP_DIR}/*.py ${APP_DIR}/routers ${APP_DIR}/core $BACKUP/ 2>/dev/null || true

                    # 파일 복사
                    rsync -av --exclude="__pycache__" --exclude="test_*.py" \\
                        --exclude="*.db" --exclude=".git" \\
                        ./ ${APP_DIR}/

                    # 패키지 업데이트
                    ${VENV}/bin/pip install -r requirements.txt -q

                    # 서비스 재시작
                    systemctl restart ${SERVICE}
                    sleep 5

                    # 헬스체크
                    HTTP=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8001/docs)
                    echo "배포 후 HTTP: $HTTP"
                    [ "$HTTP" = "200" ] && echo "배포 성공" || (echo "배포 실패"; exit 1)
                '''
            }
        }
    }

    post {
        success { echo "✅ GUARDiA 배포 성공: ${currentBuild.displayName}" }
        failure { echo "❌ GUARDiA 배포 실패: ${currentBuild.displayName}" }
        always  { cleanWs(cleanWhenNotBuilt: false, cleanWhenSuccess: false) }
    }
}
