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 inject Jenkins credentials as environment variables
                withCredentials([
                    string(credentialsId: 'TWITTER_USERNAME', variable: 'TWITTER_USERNAME'),
                    string(credentialsId: 'TWITTER_PASSWORD', variable: 'TWITTER_PASSWORD'),
                    string(credentialsId: 'TWITTER_CAT112_EMAIL', variable: 'TWITTER_CAT112_EMAIL'),
                    string(credentialsId: 'TWITTER_BOMBERSCAT_HANDLE', variable: 'TWITTER_BOMBERSCAT_HANDLE'),
                    string(credentialsId: 'BSKY_CAT112_HANDLE', variable: 'BSKY_CAT112_HANDLE'),
                    string(credentialsId: 'BSKY_CAT112_PASSWORD', variable: 'BSKY_CAT112_PASSWORD')
                ]) {
                    sh '''
                    # Activate the exact same virtual environment so Python finds Playwright and Arrow
                    . venv/bin/activate
                    
                    # Run the daemon with the injected credentials
                    python3 twitter2bsky.py \
                        --twitter-username "$TWITTER_USERNAME" \
                        --twitter-password "$TWITTER_PASSWORD" \
                        --twitter-email "$TWITTER_CAT112_EMAIL" \
                        --twitter-handle "$TWITTER_BOMBERSCAT_HANDLE" \
                        --bsky-handle "$BSKY_CAT112_HANDLE" \
                        --bsky-password "$BSKY_CAT112_PASSWORD" \
                        --bsky-base-url https://eurosky.social \
                        --bsky-langs ca
                    '''
                }
            }
        }
    }
}
