pipeline {
    agent any

    options {
        ansiColor('xterm')
        disableConcurrentBuilds()
        timestamps()
        buildDiscarder logRotator(
          artifactDaysToKeepStr: '30',
          artifactNumToKeepStr: '100',
          daysToKeepStr: '365',
          numToKeepStr: '1000'
        )
        timeout(time: 6, unit: 'HOURS')
        datadog(collectLogs: false, tags: ["service:swf-youtube-bulk-reports", "application_family:data-platform", "licensor:${Env:LICENSOR}", "environment:${Env:ENVIRONMENT}"])
    }

    parameters {
        choice(name: 'ENVIRONMENT', choices: ['prod', 'qa'], description: 'The environment to run against.')
        string(name: 'SKIP', defaultValue: '3', description: 'How many days back should wе start processing?')
        string(name: 'DAYS', defaultValue: '1', description: 'Number of days to process')
        choice(name: 'REPORT_NAME', choices: [
                'ALL_MISSED',
                'active_references',
                'ad_rates',
                'annotations',
                'asset_annotations',
                'asset_basic',
                'asset_cards',
                'asset_combined',
                'asset_conflict',
                'asset_estimated_revenue',
                'asset_demographics',
                'asset_device_os',
                'asset_end_screens',
                'asset_playback_location',
                'asset_province',
                'asset_sharing_service',
                'asset_traffic_source',
                'basic',
                'cards',
                'combined',
                'demographics',
                'device_os',
                'end_screens',
                'estimated_revenue',
                'playback_location',
                'playlist_basic',
                'playlist_combined',
                'playlist_device_os',
                'playlist_playback_location',
                'playlist_province',
                'playlist_traffic_source',
                'province',
                'sharing_service',
                'subtitles',
                'traffic_source'
        ])
        choice(name: 'LICENSOR', choices: ['theorchard', 'sme'])
        choice(name: 'SELECTED_OWNER', choices: ['' ,'orch', 'ent'], description: 'Run the flow for single content owner (theorchard licensor only), with reload set to "True"')
        booleanParam(name: 'RELOAD', defaultValue: false, description: 'when checked is sends to context "reload": "True"')
        booleanParam(name: 'ONLY_UPDATE_JOB', defaultValue: false, description: 'when checked the Jenkins job only updates itself. No execution triggers')
    }

    environment {
        CREDENTIALS_ID = "${params.ENVIRONMENT == 'prod' ? 'prod-feed-ingestion-exec-creds' : 'qa-feed-ingestion-exec-creds'}"
    }

    triggers {
        parameterizedCron(
            '''
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=asset_traffic_source
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=annotations
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=asset_annotations
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=asset_cards
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=asset_demographics
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=asset_device_os
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=asset_playback_location
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=asset_province
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=asset_sharing_service
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=cards
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=demographics
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=device_os
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=playback_location
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=province
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=sharing_service
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=subtitles
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=traffic_source
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=estimated_revenue
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;DAYS=2;SKIP=2;REPORT_NAME=asset_estimated_revenue

                    # sme load last 7 days no reload
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=asset_traffic_source
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=annotations
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=asset_annotations
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=asset_cards
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=asset_demographics
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=asset_device_os
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=asset_playback_location
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=asset_province
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=asset_sharing_service
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=cards
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=demographics
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=device_os
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=playback_location
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=province
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=sharing_service
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=subtitles
                    H H * * * % ENVIRONMENT=prod;RELOAD=false;LICENSOR=sme;DAYS=7;SKIP=4;REPORT_NAME=traffic_source

                    # sme only_download reports
                    H H * * * % ENVIRONMENT=prod;LICENSOR=sme;DAYS=7;SKIP=3;RELOAD=false;REPORT_NAME=active_references
                    H H * * * % ENVIRONMENT=prod;LICENSOR=sme;DAYS=7;SKIP=3;RELOAD=false;REPORT_NAME=asset_conflict
                    H H * * * % ENVIRONMENT=prod;LICENSOR=sme;DAYS=7;SKIP=3;RELOAD=false;REPORT_NAME=asset_end_screens
                    H H * * * % ENVIRONMENT=prod;LICENSOR=sme;DAYS=7;SKIP=3;RELOAD=false;REPORT_NAME=end_screens
                    H H * * * % ENVIRONMENT=prod;LICENSOR=sme;DAYS=7;SKIP=3;RELOAD=false;REPORT_NAME=playlist_basic
                    H H * * * % ENVIRONMENT=prod;LICENSOR=sme;DAYS=7;SKIP=3;RELOAD=false;REPORT_NAME=playlist_combined
                    H H * * * % ENVIRONMENT=prod;LICENSOR=sme;DAYS=7;SKIP=3;RELOAD=false;REPORT_NAME=playlist_device_os
                    H H * * * % ENVIRONMENT=prod;LICENSOR=sme;DAYS=7;SKIP=3;RELOAD=false;REPORT_NAME=playlist_playback_location
                    H H * * * % ENVIRONMENT=prod;LICENSOR=sme;DAYS=7;SKIP=3;RELOAD=false;REPORT_NAME=playlist_province
                    H H * * * % ENVIRONMENT=prod;LICENSOR=sme;DAYS=7;SKIP=3;RELOAD=false;REPORT_NAME=playlist_traffic_source


                    H H * * * % ENVIRONMENT=prod;LICENSOR=theorchard;DAYS=3;SKIP=2;RELOAD=false;REPORT_NAME=playlist_basic;SELECTED_OWNER=orch
                    H H * * * % ENVIRONMENT=prod;LICENSOR=theorchard;DAYS=3;SKIP=2;RELOAD=false;REPORT_NAME=playlist_combined;SELECTED_OWNER=orch
                    H H * * * % ENVIRONMENT=prod;LICENSOR=theorchard;DAYS=3;SKIP=2;RELOAD=false;REPORT_NAME=playlist_device_os;SELECTED_OWNER=orch
                    H H * * * % ENVIRONMENT=prod;LICENSOR=theorchard;DAYS=3;SKIP=2;RELOAD=false;REPORT_NAME=playlist_playback_location;SELECTED_OWNER=orch
                    H H * * * % ENVIRONMENT=prod;LICENSOR=theorchard;DAYS=3;SKIP=2;RELOAD=false;REPORT_NAME=playlist_province;SELECTED_OWNER=orch
                    H H * * * % ENVIRONMENT=prod;LICENSOR=theorchard;DAYS=3;SKIP=2;RELOAD=false;REPORT_NAME=playlist_traffic_source;SELECTED_OWNER=orch

            '''
        )
    }

    stages {
        stage('Load Shared Libraries') {
            steps {
                library "jenkins-global-libraries@master"
            }
        }
        stage('Run exec job') {
            when {
                expression {
                    params.ONLY_UPDATE_JOB == false
                }
            }
            steps {
                withEcr {
                    withCredentials([[
                    $class: 'AmazonWebServicesCredentialsBinding',
                    credentialsId: env.CREDENTIALS_ID,
                    accessKeyVariable: 'AWS_ACCESS_KEY_ID',
                    secretKeyVariable: 'AWS_SECRET_ACCESS_KEY'
                    ]])
                    {
                        dockerRun(
                            imageTag: 'latest',
                            script: '/bin/bash /var/app/feed_ingestion/flows/youtube_bulk_reports/exec.sh',
                            imageRepo: '086679231553.dkr.ecr.us-east-1.amazonaws.com/swf-feed-ingestion',
                            envVars: [
                                Environment: "'${params.ENVIRONMENT}'",
                                FEED_INGESTION_TABLE: "'${params.ENVIRONMENT}_feed_ingestion_status'",
                                AWS_ACCESS_KEY_ID: "'${AWS_ACCESS_KEY_ID}'",
                                AWS_SECRET_ACCESS_KEY: "'${AWS_SECRET_ACCESS_KEY}'",
                                AWS_DEFAULT_REGION: 'us-east-1',
                                SKIP: "${params.SKIP}",
                                DAYS: "${params.DAYS}",
                                LICENSOR: "${params.LICENSOR}",
                                REPORT_NAME: "${params.REPORT_NAME}",
                                SELECTED_OWNER: "${params.SELECTED_OWNER}",
                                RELOAD: "${params.RELOAD}"
                            ]
                        )
                    }
                }
            }
        }
    }
    post {
        failure {
            script {
                if (params.ENVIRONMENT == 'prod') {
                    slackSend (
                        color: "danger",
                        channel: "#data-alerts",
                        message: """The build ${currentBuild.fullDisplayName} has failed.! ${env.JOB_NAME} - #${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)"""
                    )
                }
            }
        }
        aborted {
            script {
                if (params.ENVIRONMENT == 'prod') {
                    slackSend (
                        color: "danger",
                        channel: "#data-alerts",
                        message: """The build ${currentBuild.fullDisplayName} has failed.! ${env.JOB_NAME} - #${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)"""
                    )
                }
            }
        }
    }
}