#!/usr/bin/env bash
set -euo pipefail

BASE="/mnt/vsftp/test/UL/log/北京/需求测试/modem功耗拆解测试/20260812/功耗模型验收测试第一轮"
RUNTIME_ROOT="/opt/AIModemAnalysis/songwei/log_workflow_runtime"
CURRENT="$RUNTIME_ROOT/current"
PY="$RUNTIME_ROOT/venv/bin/python"
MAIN="$CURRENT/skill_code_ai_md_power/scripts/2_data_process_tool/main.py"
MANIFEST="$BASE/missing_power_modem_1s_20260821.csv"
PROGRESS="$BASE/missing_power_modem_1s_20260821.progress.csv"
DONE="$BASE/missing_power_modem_1s_20260821.done.csv"
FAIL="$BASE/missing_power_modem_1s_20260821.fail.csv"
BATCH_LOG="$BASE/run_missing_power_modem_1s_20260821.batch.log"
TMPFILE="$(mktemp)"
trap 'rm -f "$TMPFILE"' EXIT

ensure_file_header() {
  local path="$1"
  local header="$2"
  if [ ! -f "$path" ] || [ ! -s "$path" ]; then
    printf '%s\n' "$header" > "$path"
  fi
}

log_msg() {
  printf '%s %s\n' "$(date '+%F %T')" "$*" | tee -a "$BATCH_LOG"
}

latest_existing_output() {
  local log_dir="$1"
  find "$log_dir/runs" -path '*/output/*_power_modem_1s_combined_utc8_with_totals.csv' -type f -printf '%T@ %p\n' 2>/dev/null | sort -nr | head -n 1 | cut -d' ' -f2-
}

remove_progress_row() {
  local row="$1"
  grep -Fvx "$row" "$PROGRESS" > "$TMPFILE" || true
  mv "$TMPFILE" "$PROGRESS"
}

ensure_progress_manifest() {
  local rows=0
  if [ -f "$PROGRESS" ]; then
    rows=$(( $(wc -l < "$PROGRESS") - 1 ))
  fi

  if [ "$rows" -gt 0 ]; then
    log_msg "RESUME existing progress rows=$rows"
    return
  fi

  printf 'rat,key,power_csv,log_dir,target_dir,target_csv\n' > "$PROGRESS"
  tail -n +2 "$MANIFEST" | while IFS= read -r raw; do
    [ -z "$raw" ] && continue
    raw=${raw%$'\r'}
    IFS=, read -r RAT KEY POWER_CSV LOG_DIR TARGET_DIR TARGET_CSV <<< "$raw"
    TARGET_CSV=${TARGET_CSV%$'\r'}
    if [ -f "$TARGET_CSV" ]; then
      continue
    fi
    printf '%s\n' "$raw" >> "$PROGRESS"
  done
  log_msg "INIT progress from manifest rows=$(($(wc -l < "$PROGRESS") - 1))"
}

mkdir -p "$BASE"
ensure_file_header "$DONE" 'rat,key,power_csv,log_dir,target_dir,target_csv,run_dir,final_output,status'
ensure_file_header "$FAIL" 'rat,key,power_csv,log_dir,target_dir,target_csv,status,reason'
touch "$BATCH_LOG"
ensure_progress_manifest

while IFS=, read -r RAT KEY POWER_CSV LOG_DIR TARGET_DIR TARGET_CSV; do
  RAT=${RAT//$'\r'/}
  KEY=${KEY//$'\r'/}
  POWER_CSV=${POWER_CSV//$'\r'/}
  LOG_DIR=${LOG_DIR//$'\r'/}
  TARGET_DIR=${TARGET_DIR//$'\r'/}
  TARGET_CSV=${TARGET_CSV//$'\r'/}
  [ "$RAT" = "rat" ] && continue

  ROW="$RAT,$KEY,$POWER_CSV,$LOG_DIR,$TARGET_DIR,$TARGET_CSV"
  log_msg "START $RAT $KEY"

  if [ -f "$TARGET_CSV" ]; then
    remove_progress_row "$ROW"
    printf '%s,%s,%s,%s,%s,%s,%s,%s,%s\n' "$RAT" "$KEY" "$POWER_CSV" "$LOG_DIR" "$TARGET_DIR" "$TARGET_CSV" '' "$TARGET_CSV" 'skipped_existing_target' >> "$DONE"
    log_msg "SKIP existing target $TARGET_CSV"
    continue
  fi

  EXISTING_OUTPUT=$(latest_existing_output "$LOG_DIR" || true)
  if [ -n "$EXISTING_OUTPUT" ] && [ -f "$EXISTING_OUTPUT" ]; then
    cp -f "$EXISTING_OUTPUT" "$TARGET_CSV"
    RUN_DIR=$(dirname "$(dirname "$EXISTING_OUTPUT")")
    remove_progress_row "$ROW"
    printf '%s,%s,%s,%s,%s,%s,%s,%s,%s\n' "$RAT" "$KEY" "$POWER_CSV" "$LOG_DIR" "$TARGET_DIR" "$TARGET_CSV" "$RUN_DIR" "$EXISTING_OUTPUT" 'ok_reused_existing_output' >> "$DONE"
    log_msg "DONE reused existing output -> $TARGET_CSV"
    continue
  fi

  RUN_STDOUT="$LOG_DIR/run_power_modem_1s_stdout.log"
  if "$PY" "$MAIN" -d "$LOG_DIR" --power-file "$POWER_CSV" > "$RUN_STDOUT" 2>&1; then
    FINAL_OUTPUT=$(latest_existing_output "$LOG_DIR" || true)
    if [ -n "$FINAL_OUTPUT" ] && [ -f "$FINAL_OUTPUT" ]; then
      cp -f "$FINAL_OUTPUT" "$TARGET_CSV"
      RUN_DIR=$(dirname "$(dirname "$FINAL_OUTPUT")")
      remove_progress_row "$ROW"
      printf '%s,%s,%s,%s,%s,%s,%s,%s,%s\n' "$RAT" "$KEY" "$POWER_CSV" "$LOG_DIR" "$TARGET_DIR" "$TARGET_CSV" "$RUN_DIR" "$FINAL_OUTPUT" 'ok' >> "$DONE"
      log_msg "DONE generated -> $TARGET_CSV"
    else
      printf '%s,%s,%s,%s,%s,%s,%s,%s\n' "$RAT" "$KEY" "$POWER_CSV" "$LOG_DIR" "$TARGET_DIR" "$TARGET_CSV" 'failed' 'no_final_output' >> "$FAIL"
      log_msg "FAIL no_final_output $RAT $KEY"
    fi
  else
    REASON=$(tail -n 30 "$RUN_STDOUT" | tr '\n' ' ' | tr ',' ';' | sed 's/  */ /g' | cut -c1-1000)
    printf '%s,%s,%s,%s,%s,%s,%s,%s\n' "$RAT" "$KEY" "$POWER_CSV" "$LOG_DIR" "$TARGET_DIR" "$TARGET_CSV" 'failed' "$REASON" >> "$FAIL"
    log_msg "FAIL command $RAT $KEY reason=$REASON"
  fi
done < "$PROGRESS"

log_msg "BATCH_DONE done_rows=$(($(wc -l < "$DONE")-1)) fail_rows=$(($(wc -l < "$FAIL")-1)) remaining_rows=$(($(wc -l < "$PROGRESS")-1))"
