pipeline {
    agent any

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

    triggers {
        cron('H/30 * * * *')
    }

    stages {
        stage('Checkout Code') {
            steps {
                // Pulls the code from the repository where this Jenkinsfile lives
                checkout scm
            }
        }

        stage('Setup Python & Install Dependencies') {
            steps {
                sh '''
                set -e  # Exit immediately if a command exits with a non-zero status
                
                # Create a virtual environment named 'venv'
                python3 -m venv venv
                
                # Activate the virtual environment and install dependencies
                . venv/bin/activate && \
                pip install --upgrade pip && \
                pip install -U atproto tweety-ns playwright httpx arrow python-dotenv moviepy grapheme
                
                # Check if moviepy is installed
                pip list | grep moviepy || { echo 'MoviePy installation failed!'; exit 1; }
                
                # Check if FFmpeg is installed
                ffmpeg -version || { echo 'FFmpeg is not installed!'; exit 1; }

                # Verify that moviepy can be imported
                python3 -c "import moviepy" || { echo 'MoviePy import failed!'; exit 1; }

                # Install the local browser binaries for this environment
                playwright install chromium
                '''
            }
        }

        stage('Run Script') {
            steps {
                // Securely injects Jenkins credentials as environment variables
                withCredentials([
                    string(credentialsId: 'TWITTER_USERNAME', variable: 'TWITTER_USERNAME'),
                    string(credentialsId: 'TWITTER_PASSWORD', variable: 'TWITTER_PASSWORD'),
                    string(credentialsId: 'TWITTER_RAC1_EMAIL', variable: 'TWITTER_RAC1_EMAIL'),
                    string(credentialsId: 'TWITTER_METEORAC1_HANDLE', variable: 'TWITTER_METEORAC1_HANDLE'),
                    string(credentialsId: 'BSKY_RAC1_HANDLE', variable: 'BSKY_RAC1_HANDLE'),
                    string(credentialsId: 'BSKY_RAC1_APP_PASSWORD', variable: 'BSKY_RAC1_APP_PASSWORD')
                ]) {
                    sh '''
                    # Activate the virtual environment and run the script
                    . venv/bin/activate && \
                    python3 twitter2bsky_daemon.py \
                        --twitter-username "$TWITTER_USERNAME" \
                        --twitter-password "$TWITTER_PASSWORD" \
                        --twitter-email "$TWITTER_RAC1_EMAIL" \
                        --twitter-handle "$TWITTER_METEORAC1_HANDLE" \
                        --bsky-handle "$BSKY_RAC1_HANDLE" \
                        --bsky-password "$BSKY_RAC1_APP_PASSWORD" \
                        --bsky-base-url https://eurosky.social
                    '''
                }
            }
        }
    }
}