#!/usr/bin/env bash

# exit on first failure
set -e

# Get SED_CMD, SED_I, and the BSDSED flag
. $(dirname $0)/opt_sed

while [[ $# > 1 ]]; do
  DID=0
  for FN in Marlin/Configuration.h Marlin/Configuration_adv.h; do
    if [[ $BSDSED ]]; then
      # BSD sed version (macOS)
      $SED_CMD "${SED_I[@]}" \
        "/^[[:space:]]*\/\{0,2\}[[:space:]]*#define[[:space:]]+${1}\b/{
          s/^[[:space:]]*\/\{0,2\}[[:space:]]*\(#define[[:space:]]+${1}\b\)[[:space:]]*.*/\1 ${2} \/\/ &/
          h
          \$b end
        }
        \$!b
        :end
        x
        /./{ x; q0; }
        x
        q1" \
        $FN && DID=1
    else
      # GNU sed version
      $SED_CMD "${SED_I[@]}" \
        "/^\(\s*\)\/\{0,2\}\s*\(#define\s\+${1}\b\)\s*\(.*\)$/{s//\1\2 ${2} \/\/ \3/;h};\${x;/./{x;q0};x;q1}" \
        $FN && DID=1
    fi
  done
  ((DID)) ||
    eval "echo '#define ${1} ${2}' >>Marlin/Configuration.h" ||
      (echo "ERROR: opt_set Can't set or add ${1}" >&2 && exit 9)
  shift 2
done