#!/bin/bash
# Submit contingency jobs for all 26 missing phenotypes
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG="${SCRIPT_DIR}/contingency_batch.log"

echo "=== Contingency batch submission: $(date) ===" | tee "$LOG"

# Upload scripts once
TOOLS_DX="/results/tools"
dx mkdir -p "$TOOLS_DX/" 2>/dev/null || true
for script in extract_phenotype.py contingency_all.py contingency_runner.sh; do
    echo "Uploading ${script}..." | tee -a "$LOG"
    dx rm "${TOOLS_DX}/${script}" 2>/dev/null || true
    dx upload "${SCRIPT_DIR}/${script}" --path "${TOOLS_DX}/" --brief
done

# Define phenotypes: NAME TYPE
declare -a JOBS=()

submit_job() {
    local PHENOTYPE="$1"
    local PHENO_TYPE="$2"
    local CONTINGENCY_RESULTS_DX="/results/tools/contingency_results/${PHENOTYPE}"
    local TOOLS_MNT="/mnt/project${TOOLS_DX}"

    dx mkdir -p "$CONTINGENCY_RESULTS_DX/" 2>/dev/null || true

    local JOB_ID=$(dx run app-swiss-army-knife \
        --instance-type mem3_ssd1_v2_x48 \
        -icmd="bash ${TOOLS_MNT}/contingency_runner.sh '${PHENOTYPE}' 'snv,hla,cypmicro,cypdosage,lof,mpc,cnv' 36 '${PHENO_TYPE}'" \
        --destination "${CONTINGENCY_RESULTS_DX}/" \
        --brief -y)

    echo "SUBMITTED: ${PHENOTYPE} (${PHENO_TYPE}) -> ${JOB_ID}" | tee -a "$LOG"
    JOBS+=("${JOB_ID}|${PHENOTYPE}")
}

# Binary phenotypes (4)
submit_job amitriptyline__M255 binary
submit_job amlodipine__M796 binary
submit_job fentanyl__prescribed binary
submit_job nicorandil__prescribed binary
submit_job L570 binary
submit_job p2188_i0__long_illness binary
submit_job simvastatin__I10 binary
submit_job p1727_i0_ohe1__skin_tan_ease__very_tan binary

# Continuous phenotypes (18)
submit_job apomorphine__max_dose continuous
submit_job olmesartan__num_of_therapies continuous
submit_job oxazepam__longest_therapy_duration continuous
submit_job pethidine__longest_therapy_duration continuous
submit_job propranolol__median_dose__ln continuous
submit_job atorvastatin__optimal_dose__ln continuous
submit_job amlodipine__optimal_dose continuous
submit_job chlorpromazine__mean_dose continuous
submit_job p23436_i0__cholines_total continuous
submit_job buprenorphine__num_of_prescriptions continuous
submit_job p23461_i0__glutamine continuous
submit_job glyceryl_trinitrate__optimal_dose continuous
submit_job ibuprofen__optimal_dose continuous
submit_job p23471_i0__lactate continuous
submit_job morphine__optimal_dose continuous
submit_job p23468_i0__phenylalanine continuous
submit_job rosuvastatin__optimal_dose continuous
submit_job p48_i0__waist_circ continuous

echo "" | tee -a "$LOG"
echo "=== All ${#JOBS[@]} jobs submitted ===" | tee -a "$LOG"
echo "" | tee -a "$LOG"

# Wait and download results
SUCCEEDED=0
FAILED=0
for entry in "${JOBS[@]}"; do
    IFS='|' read -r JOB_ID PHENOTYPE <<< "$entry"
    echo "Waiting for ${PHENOTYPE} (${JOB_ID})..." | tee -a "$LOG"
    dx wait "$JOB_ID" 2>/dev/null || true

    STATE=$(dx describe "$JOB_ID" --json 2>/dev/null | python3 -c "import sys,json; print(json.load(sys.stdin).get('state','unknown'))" 2>/dev/null || echo "unknown")

    if [[ "$STATE" == "done" ]]; then
        RESULT_DX="/results/tools/contingency_results/${PHENOTYPE}/contingency_${PHENOTYPE}.tsv"
        OUTPUT="${SCRIPT_DIR}/contingency_${PHENOTYPE}.tsv"
        if dx download "$RESULT_DX" -o "$OUTPUT" -f 2>/dev/null; then
            N=$(tail -n +2 "$OUTPUT" | wc -l)
            echo "  OK: ${PHENOTYPE} (${N} variants)" | tee -a "$LOG"
            SUCCEEDED=$((SUCCEEDED + 1))
        else
            echo "  DOWNLOAD FAILED: ${PHENOTYPE}" | tee -a "$LOG"
            FAILED=$((FAILED + 1))
        fi
    else
        echo "  JOB FAILED: ${PHENOTYPE} (state: ${STATE})" | tee -a "$LOG"
        FAILED=$((FAILED + 1))
    fi
done

echo "" | tee -a "$LOG"
echo "=== BATCH COMPLETE ===" | tee -a "$LOG"
echo "Succeeded: $SUCCEEDED" | tee -a "$LOG"
echo "Failed: $FAILED" | tee -a "$LOG"
echo "Log: $LOG" | tee -a "$LOG"
