#!/bin/bash

PIPE="/home/litd/ncbi/chipseq/narrow/ChIPseq_Narrow.sh"
DATADIR="/BRC/yan/heart/Chip_GSE113760"
RUNDIR="${DATADIR}/pipeline_runs"
THREADS=8    # per job; 4 jobs × 8 = 32 threads total

mkdir -p ${RUNDIR} ${DATADIR}/logs

# ============================================================
# Sample pairs
# ============================================================
declare -A CHIP_FILES=(
  [WT_rep1]="${DATADIR}/WT/GSM3119070_ERRg_ChIP_WT_rep1_SRR7073311.fastq.gz"
  [WT_rep2]="${DATADIR}/WT/GSM3119071_ERRg_ChIP_WT_rep2_SRR7073312.fastq.gz"
  [KO_rep1]="${DATADIR}/ERRGKO/GSM3119072_ERRg_ChIP_ERRgKO1_SRR7073313.fastq.gz"
  [KO_rep2]="${DATADIR}/ERRGKO/GSM3119073_ERRg_ChIP_ERRgKO2_SRR7073314.fastq.gz"
)

declare -A INPUT_FILES=(
  [WT_rep1]="${DATADIR}/WT/GSM3119074_Input_WT_rep1_SRR7073315.fastq.gz"
  [WT_rep2]="${DATADIR}/WT/GSM3119075_Input_WT_rep2_SRR7073316.fastq.gz"
  [KO_rep1]="${DATADIR}/ERRGKO/GSM3119076_Input_ERRgKO1_SRR7073317.fastq.gz"
  [KO_rep2]="${DATADIR}/ERRGKO/GSM3119077_Input_ERRgKO2_SRR7073318.fastq.gz"
)

# ============================================================
# Pre-create all symlinks in RUNDIR
# ============================================================
for SAMPLE in WT_rep1 WT_rep2 KO_rep1 KO_rep2; do
  ln -sf ${CHIP_FILES[$SAMPLE]}  ${RUNDIR}/$(basename ${CHIP_FILES[$SAMPLE]})  2>/dev/null || true
  ln -sf ${INPUT_FILES[$SAMPLE]} ${RUNDIR}/$(basename ${INPUT_FILES[$SAMPLE]}) 2>/dev/null || true
done

# ============================================================
# Launch all jobs in parallel (each in its own subshell)
# ============================================================
declare -A PIDS

for SAMPLE in WT_rep1 WT_rep2 KO_rep1 KO_rep2; do

  CHIP_NAME=$(basename ${CHIP_FILES[$SAMPLE]} .fastq.gz)
  INPUT_NAME=$(basename ${INPUT_FILES[$SAMPLE]} .fastq.gz)
  LOG="${DATADIR}/logs/${SAMPLE}_pipeline.log"

  echo "[$(date)] Launching: ${SAMPLE} (chip=${CHIP_NAME})"

  (
    cd ${RUNDIR}
    bash ${PIPE} \
      -g hg38 \
      -m ${SAMPLE} \
      -t ${THREADS} \
      -c ${CHIP_NAME}.fastq.gz \
      -i ${INPUT_NAME}.fastq.gz \
      > ${LOG} 2>&1
  ) &

  PIDS[$SAMPLE]=$!
done

echo ""
echo "All 4 jobs launched. PIDs:"
for SAMPLE in "${!PIDS[@]}"; do
  echo "  ${SAMPLE}: PID ${PIDS[$SAMPLE]}"
done
echo ""

# ============================================================
# Wait for all jobs and report status
# ============================================================
FAIL=0
for SAMPLE in WT_rep1 WT_rep2 KO_rep1 KO_rep2; do
  wait ${PIDS[$SAMPLE]}
  EXIT=$?
  if [ $EXIT -eq 0 ]; then
    echo "[$(date)] DONE:   ${SAMPLE}"
  else
    echo "[$(date)] FAILED: ${SAMPLE} (exit code $EXIT)"
    FAIL=1
  fi
done

echo ""
if [ $FAIL -eq 0 ]; then
  echo "=== All samples completed successfully ==="
else
  echo "=== One or more samples FAILED — check logs in ${DATADIR}/logs/ ==="
  exit 1
fi
