#!/bin/bash
# Generate QC Manhattan plots for all 38 test set phenotypes.
# Outputs flat PNGs to qc_test/ directory.
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
QC_DIR="${SCRIPT_DIR}/qc_test"
mkdir -p "$QC_DIR"

# NAME|RESULT_DIR|CONTINGENCY_TSV|PHENO_TYPE
declare -a PHENOTYPES=(
  "morphine__J189|result/marpiech_finalregeniedosages_2026_02_27_21_11_14_morphine__J189_regenie_dosages|contingency_morphine__J189.tsv|binary"
  "morphine__E86|result/marpiech_finalregeniedosages_2026_03_04_10_24_45_morphine__E86_regenie_dosages|contingency_morphine__E86.tsv|binary"
  "zopiclone__M796|result/marpiech_finalregeniedosages_2026_02_28_02_50_52_zopiclone__M796_regenie_dosages|contingency_zopiclone__M796.tsv|binary"
  "propranolol__prescribed|result/marpiech_finalregeniedosages_2026_02_14_20_52_51_propranolol__prescribed_regenie_dosages|contingency_propranolol__prescribed.tsv|binary"
  "prasugrel__num_of_therapies|result/marpiech_finalregeniedosages_2026_03_09_07_32_12_prasugrel__num_of_therapies_regenie_dosages|contingency_prasugrel__num_of_therapies.tsv|binary"
  "amitriptyline__M255|result/marpiech_finalregeniedosages_2026_02_28_00_38_23_amitriptyline__M255_regenie_dosages|contingency_amitriptyline__M255.tsv|binary"
  "amlodipine__M796|result/marpiech_finalregeniedosages_2026_03_03_16_16_37_amlodipine__M796_regenie_dosages|contingency_amlodipine__M796.tsv|binary"
  "fentanyl__prescribed|result/marpiech_finalregeniedosages_2026_03_08_00_09_29_fentanyl__prescribed_regenie_dosages|contingency_fentanyl__prescribed.tsv|binary"
  "nicorandil__prescribed|result/marpiech_finalregeniedosages_2026_03_08_23_01_10_nicorandil__prescribed_regenie_dosages|contingency_nicorandil__prescribed.tsv|binary"
  "L570|result/marpiech_finalregeniedosages_2026_03_05_19_18_26_L570_regenie_dosages|contingency_L570.tsv|binary"
  "p2188_i0__long_illness|result/marpiech_finalregeniedosages_2026_02_18_22_00_37_p2188_i0__long_illness_regenie_dosages|contingency_p2188_i0__long_illness.tsv|binary"
  "simvastatin__I10|result/marpiech_finalregeniedosages_2026_02_16_07_58_58_simvastatin__I10_regenie_dosages|contingency_simvastatin__I10.tsv|binary"
  "p1727_i0_ohe1__skin_tan_ease__very_tan|result/marpiech_finalregeniedosages_2026_02_25_22_29_09_p1727_i0_ohe1__skin_tan_ease__very_tan_regenie_dosages|contingency_p1727_i0_ohe1__skin_tan_ease__very_tan.tsv|binary"
  "tramadol__L409|result/marpiech_tramadol_2026_02_04_20_46_26_tramadol__L409_regenie_dosages|contingency_tramadol__L409.tsv|binary"
  "simvastatin__prescribed|result/marpiech_finalregeniedosages_2026_02_15_04_42_11_simvastatin__prescribed_regenie_dosages|contingency_simvastatin__prescribed.tsv|binary"
  "warfarin__prescribed|result/marpiech_finalregeniedosages_2026_02_27_20_08_41_warfarin__prescribed_regenie_dosages|contingency_warfarin__prescribed.tsv|binary"
  "simvastatin__J069|result/marpiech_finalregeniedosages_2026_03_03_09_37_16_simvastatin__J069_regenie_dosages|contingency_simvastatin__J069.tsv|binary"
  "olmesartan__prescribed||||binary"
  "apomorphine__max_dose|result/marpiech_finalregeniedosages_2026_03_06_21_36_59_apomorphine__max_dose_regenie_dosages|contingency_apomorphine__max_dose.tsv|continuous"
  "olmesartan__num_of_therapies|result/marpiech_finalregeniedosages_2026_03_08_23_57_42_olmesartan__num_of_therapies_regenie_dosages|contingency_olmesartan__num_of_therapies.tsv|continuous"
  "oxazepam__longest_therapy_duration|result/marpiech_finalregeniedosages_2026_03_09_01_18_42_oxazepam__longest_therapy_duration_regenie_dosages|contingency_oxazepam__longest_therapy_duration.tsv|continuous"
  "pethidine__longest_therapy_duration|result/marpiech_finalregeniedosages_2026_03_09_02_24_41_pethidine__longest_therapy_duration_regenie_dosages|contingency_pethidine__longest_therapy_duration.tsv|continuous"
  "propranolol__median_dose__ln|result/marpiech_finalregeniedosages_2026_02_14_20_52_36_propranolol__median_dose__ln_regenie_dosages|contingency_propranolol__median_dose__ln.tsv|continuous"
  "atorvastatin__optimal_dose__ln|result/marpiech_finalregeniedosages_2026_02_12_11_39_08_atorvastatin__optimal_dose__ln_regenie_dosages|contingency_atorvastatin__optimal_dose__ln.tsv|continuous"
  "p1558_i0__alcohol_intake_freq|result/marpiech_finalregeniedosages_2026_02_18_05_14_42_p1558_i0__alcohol_intake_freq_regenie_dosages|contingency_p1558_i0__alcohol_intake_freq.tsv|continuous"
  "warfarin__optimal_dose|result/marpiech_finalregeniedosages_2026_02_15_17_58_25_warfarin__optimal_dose_regenie_dosages|contingency_warfarin__optimal_dose.tsv|continuous"
  "amlodipine__optimal_dose|result/marpiech_finalregeniedosages_2026_02_12_04_04_49_amlodipine__optimal_dose_regenie_dosages|contingency_amlodipine__optimal_dose.tsv|continuous"
  "chlorpromazine__mean_dose|result/marpiech_finalregeniedosages_2026_03_07_08_12_16_chlorpromazine__mean_dose_regenie_dosages|contingency_chlorpromazine__mean_dose.tsv|continuous"
  "p23436_i0__cholines_total|result/marpiech_finalregeniedosages_2026_02_21_12_21_11_p23436_i0__cholines_total_regenie_dosages|contingency_p23436_i0__cholines_total.tsv|continuous"
  "buprenorphine__num_of_prescriptions|result/marpiech_finalregeniedosages_2026_02_12_16_26_06_buprenorphine__num_of_prescriptions_regenie_dosages|contingency_buprenorphine__num_of_prescriptions.tsv|continuous"
  "p23461_i0__glutamine|result/marpiech_finalregeniedosages_2026_02_21_16_08_43_p23461_i0__glutamine_regenie_dosages|contingency_p23461_i0__glutamine.tsv|continuous"
  "glyceryl_trinitrate__optimal_dose|result/marpiech_finalregeniedosages_2026_02_13_22_38_40_glyceryl_trinitrate__optimal_dose_regenie_dosages|contingency_glyceryl_trinitrate__optimal_dose.tsv|continuous"
  "ibuprofen__optimal_dose|result/marpiech_finalregeniedosages_2026_02_14_03_30_19_ibuprofen__optimal_dose_regenie_dosages|contingency_ibuprofen__optimal_dose.tsv|continuous"
  "p23471_i0__lactate|result/marpiech_finalregeniedosages_2026_02_21_18_26_28_p23471_i0__lactate_regenie_dosages|contingency_p23471_i0__lactate.tsv|continuous"
  "morphine__optimal_dose|result/marpiech_optimal_dose_2026_02_05_09_16_07_morphine__optimal_dose_regenie_dosages|contingency_morphine__optimal_dose.tsv|continuous"
  "p23468_i0__phenylalanine|result/marpiech_finalregeniedosages_2026_02_21_17_46_25_p23468_i0__phenylalanine_regenie_dosages|contingency_p23468_i0__phenylalanine.tsv|continuous"
  "rosuvastatin__optimal_dose|result/marpiech_finalregeniedosages_2026_02_15_01_31_28_rosuvastatin__optimal_dose_regenie_dosages|contingency_rosuvastatin__optimal_dose.tsv|continuous"
  "p48_i0__waist_circ|result/marpiech_finalregeniedosages_2026_02_17_13_37_23_p48_i0__waist_circ_regenie_dosages|contingency_p48_i0__waist_circ.tsv|continuous"
)

SUCCEEDED=0
FAILED=0
SKIPPED=0

for entry in "${PHENOTYPES[@]}"; do
  IFS='|' read -r name result_dir contingency pheno_type <<< "$entry"

  if [[ -z "$result_dir" ]]; then
    echo "SKIP: ${name} — no GWAS results"
    SKIPPED=$((SKIPPED + 1))
    continue
  fi

  # Skip if plot already exists and is newer than contingency
  if [[ -f "${QC_DIR}/${name}_manhattan.png" && -f "${SCRIPT_DIR}/${contingency}" ]]; then
    plot_time=$(stat -c %Y "${QC_DIR}/${name}_manhattan.png")
    cont_time=$(stat -c %Y "${SCRIPT_DIR}/${contingency}")
    if [[ $plot_time -gt $cont_time ]]; then
      echo "CACHED: ${name}"
      SUCCEEDED=$((SUCCEEDED + 1))
      continue
    fi
  fi

  results_tsv=$(ls "${SCRIPT_DIR}/${result_dir}/"*-results.tsv 2>/dev/null | head -1)
  if [[ -z "$results_tsv" ]]; then
    echo "SKIP: ${name} — no results TSV in ${result_dir}"
    SKIPPED=$((SKIPPED + 1))
    continue
  fi

  echo "=== ${name} (${pheno_type}) ==="
  rm -rf /tmp/qc_regen
  mkdir -p /tmp/qc_regen

  cmd=(Rscript "${SCRIPT_DIR}/gwas_viz_combined.R"
       --input "$results_tsv"
       --output /tmp/qc_regen
       --prefix "$name"
       --phenotype-type "${pheno_type:-binary}")

  if [[ -n "$contingency" && -f "${SCRIPT_DIR}/${contingency}" ]]; then
    cmd+=(--contingency "${SCRIPT_DIR}/${contingency}")
  fi

  if "${cmd[@]}" 2>&1 | grep -E 'Contingency|Flagged|flagged|complete|Analysis'; then
    if [[ -f "/tmp/qc_regen/${name}_manhattan.png" ]]; then
      cp "/tmp/qc_regen/${name}_manhattan.png" "${QC_DIR}/${name}_manhattan.png"
      echo "  -> ${name}_manhattan.png"
      SUCCEEDED=$((SUCCEEDED + 1))
    else
      echo "  ERROR: no Manhattan PNG"
      FAILED=$((FAILED + 1))
    fi
  else
    echo "  ERROR: Rscript failed"
    FAILED=$((FAILED + 1))
  fi
  rm -rf /tmp/qc_regen
  echo ""
done

echo "=== Done ==="
echo "Succeeded: ${SUCCEEDED}"
echo "Failed:    ${FAILED}"
echo "Skipped:   ${SKIPPED}"
echo "Total PNGs: $(ls "$QC_DIR"/*.png 2>/dev/null | wc -l)"
