#!/bin/bash
# Script for running all of the normalized channels for glam. Do not check in
# the results of this script. This is meant for backfill only.
# Bash equivalent of: https://github.com/mozilla/telemetry-airflow/pull/1124

set -ex

function ds_range {
    DS_START=$1 DS_END=$2 python3 - <<EOD
from datetime import datetime, date, timedelta, datetime
from os import environ
start_date = datetime.fromisoformat(environ["DS_START"])
end_date = datetime.fromisoformat(environ["DS_END"])
dates = []
for i in range((end_date - start_date).days+1):
    dt = start_date + timedelta(i)
    dates.append(dt.strftime("%Y-%m-%d"))
print("\n".join(dates))
EOD
}

export DATASET=${DATASET:-glam_etl_dev}
START_DATE=${START_DATE?}
END_DATE=${END_DATE?}
RUN_EXPORT=${RUN_EXPORT:-true}

dir="$(dirname "$0")"

app_ids=(
    "org_mozilla_fenix"
    "org_mozilla_fenix_nightly"
    "org_mozilla_firefox"
    "org_mozilla_firefox_beta"
    "org_mozilla_fennec_aurora"
)
logical_app_ids=(
    "org_mozilla_fenix_glam_nightly"
    "org_mozilla_fenix_glam_beta"
    "org_mozilla_fenix_glam_release"
)

for app_id in "${app_ids[@]}"; do
    PRODUCT=$app_id STAGE=daily $dir/generate_glean_sql &
done
for logical_app_id in "${logical_app_ids[@]}"; do
    PRODUCT=$logical_app_id STAGE=incremental $dir/generate_glean_sql &
done
wait

for ds in $(ds_range "$START_DATE" "$END_DATE"); do
    echo $ds
    for app_id in "${app_ids[@]}"; do
        SUBMISSION_DATE=$ds PRODUCT=$app_id STAGE=daily $dir/run_glam_sql
    done

    wait
    for logical_app_id in "${logical_app_ids[@]}"; do
        SUBMISSION_DATE=$ds BACKFILL_ONLY=true PRODUCT=$logical_app_id STAGE=incremental $dir/run_glam_sql
    done
    wait
done

if $RUN_EXPORT; then
    for logical_app_id in "${logical_app_ids[@]}"; do
        EXPORT_ONLY=true PRODUCT=$logical_app_id STAGE=incremental $dir/run_glam_sql
    done
fi
