pipeline {
    agent any

    environment {
        APP_NAME = 'Polizia'
        APP_ENV = 'testing'
        APP_KEY = 'base64:1YsMWZ+cIDVa5NIePkjsXVheT9rbykHDs/CnGPUQdqU='
        APP_DEBUG = 'false'
        APP_URL = 'https://frascati.dev.webmagistri.biz'

        LOG_CHANNEL = 'stack'
        LOG_DEPRECATIONS_CHANNEL = 'null'
        LOG_LEVEL = 'debug'

        DB_CONNECTION = 'mysql'
        DB_HOST = '127.0.0.1'
        DB_PORT = '3306'
        DB_DATABASE = 'polizia_online'
        DB_USERNAME = 'admin'
        DB_PASSWORD = 'admin'

        MCTC_URL = 'https://www.ilportaledellautomobilista.it/Info-ws/services'
        MCTC_USER = 'CMRM001301'
        MCTC_PASSWORD = '2PMPM*86'

        STORAGE_PATH = 'app/public/'

        REMOTE_HOST = '10.2.0.10'
        REMOTE_USER = 'deploy'
        REMOTE_DIR = '/var/www/html/polizia'

        ADMIN_EMAIL = 'f.fratini@webmagistri.it'
    }

    stages {
        stage('Setup') {

            stage('Verify Host') {
                steps {
                    sh 'hostname'
                    sh 'hostname -I'
                    sh 'whoami'
                }
            }
            steps {
                // Check versions if available
                sh '/usr/bin/php --version || echo "PHP not available"'
                sh 'composer --version || echo "Composer not available"'
                sh 'node --version || echo "Node not available"'
                sh 'npm --version || echo "NPM not available"'
            }
        }

        stage('Get Code') {
            steps {
                checkout scm
            }
        }

        stage('Install Dependencies') {
            steps {
                sh 'composer install --no-interaction --no-progress --prefer-dist || echo "Skipping composer install"'
            }
        }

        stage('Setup Environment') {
            steps {
                sh '/usr/bin/php artisan key:generate || echo "Skipping key generation"'
                sh '/usr/bin/php artisan config:clear || echo "Skipping config clear"'
                sh '/usr/bin/php artisan cache:clear || echo "Skipping cache clear"'
            }
        }

        stage('Build Assets') {
            steps {
                sh 'npm install || echo "Skipping npm install"'
                sh 'npm run build || echo "Skipping npm build"'
            }
        }

        stage('Deploy to Server') {
            when {
                anyOf {
                    branch 'develop'
                }
            }
            steps {
                sshagent(['ssh-key-10.2.0.10']) {
                    sh "ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'mkdir -p ${REMOTE_DIR}'"

                    sh """
                        rsync -avz --exclude '.git' --exclude 'node_modules' --exclude 'vendor' -e 'ssh -o StrictHostKeyChecking=no' ./ ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/
                    """

                    sh """
                        ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'cd ${REMOTE_DIR} && \
                        composer install --no-interaction --no-dev --prefer-dist && \
                        npm install && \
                        npm run build && \
                        php artisan migrate --force && \
                        php artisan config:cache && \
                        php artisan route:cache && \
                        php artisan view:cache && \
                        php artisan optimize && \
                        php artisan storage:link && \
                        chmod -R 775 storage bootstrap/cache && \
                        chown -R www-data:www-data .'
                    """

                    // Restart relevant services if needed
                    sh "ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'sudo systemctl restart php8.1-fpm || sudo systemctl restart php-fpm || echo \"PHP service restart failed, may need manual intervention\"'"
                    sh "ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'sudo systemctl restart nginx || echo \"Nginx restart failed, may need manual intervention\"'"

                    // Clear any caches
                    sh "ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'cd ${REMOTE_DIR} && php artisan cache:clear'"
                }
            }
        }
    }

    post {
        always {
            node('any') {
                cleanWs()
            }
        }
        success {
            echo 'Build successful! The Polizia application is now deployed to 10.2.0.10'
            mail to: "${ADMIN_EMAIL}",
                 subject: 'Polizia - Build Successful',
                 body: 'The build was successful and the Polizia application has been deployed to the server at 10.2.0.10'
        }
        failure {
            echo 'Build failed! Please check the console output to fix the issues.'
            mail to: "${ADMIN_EMAIL}",
                 subject: 'Polizia - Build Failed',
                 body: 'The build has failed. Please check Jenkins for details.'
        }
    }
}
