#!/bin/bash
# usage: run.sh <lang> <src> <in> <exp> <tl_sec>
# lang: c|cpp|java|py
set -euo pipefail

LANG="$1"; SRC="$2"; IN="$3"; EXP="$4"; TL="${5:-2}"
WORKDIR="$(pwd)"

compile() {
  case "$LANG" in
    c)   gcc -O2 -pipe -s -o prog "$SRC" 2> compile.log ;;
    cpp) g++ -std=gnu++17 -O2 -pipe -s -o prog "$SRC" 2> compile.log ;;
    java) javac "$SRC" 2> compile.log ;;
    py)  true ;;
    *) echo "unsupported lang"; exit 3 ;;
  esac
}

run_prog() {
  case "$LANG" in
    c|cpp)  timeout "${TL}s" ./prog < "$IN" > user.out 2> run.err || return $? ;;
    java)   timeout "${TL}s" java Main < "$IN" > user.out 2> run.err || return $? ;;
    py)     timeout "${TL}s" python3 "$SRC" < "$IN" > user.out 2> run.err || return $? ;;
  esac
  return 0
}

# 1) 컴파일
if ! compile; then
  echo "VERDICT 6 Compile Error"
  cat compile.log
  exit 0  # Judge0에선 항상 0으로 종료(상태는 우리 stdout로 판정)
fi

# 2) 실행
START=$(date +%s%3N)
if ! run_prog; then
  rc=$?
  if [ "$rc" -eq 124 ]; then
    echo "VERDICT 5 Time Limit Exceeded time=$(($(date +%s%3N)-START))ms"
  else
    echo "VERDICT 7 Runtime Error time=$(($(date +%s%3N)-START))ms"
  fi
  exit 0
fi
ELAPSED=$(( $(date +%s%3N) - START ))

# 3) SPJ (checker.py) 호출
if [ ! -x "spj/checker.py" ]; then
  echo "VERDICT 13 Checker Missing"
  exit 0
fi

if python3 spj/checker.py "$IN" "$EXP" "user.out"; then
  echo "VERDICT 3 Accepted time=${ELAPSED}ms"
else
  echo "VERDICT 4 Wrong Answer time=${ELAPSED}ms"
fi

exit 0
