#!/usr/bin/env bash
# Link NEMO restart files into <rundir>/initialstate/
# Usage: do_linkrest_op <nd> <rest_str> <rest_dir> <rundir>
#   nd        : number of subdomains (integer)
#   rest_str  : restart prefix, e.g. EST05nm_op_rerun11_00000360
#   rest_dir  : path to directory that contains "restarts/" with *_restart_* files
#   rundir    : target run directory that contains /initialstate/

set -euo pipefail

# ---------- helpers ----------
ts(){ TZ=EET date '+%Y-%m-%d %H:%M:%S (utc%z)'; }
log(){ printf "[%s] %s\n" "$(ts)" "$*"; }
die(){ echo "ERROR: $*" >&2; exit 1; }

# ---------- args ----------
if [[ $# -ne 4 ]]; then
  echo "Usage: $0 <nd> <rest_str> <rest_dir> <rundir>" >&2
  exit 1
fi

nd_raw="$1"
rest_str="$2"
rest_dir="$3"
rundir="$4"

# Sanity
[[ "${nd_raw}" =~ ^[0-9]+$ ]] || die "nd must be an integer, got '${nd_raw}'"
nd=$((10#${nd_raw}))  # decimal, ignore leading zeros

[[ -d "${rest_dir}" ]] || die "rest_dir not found: ${rest_dir}"
[[ -d "${rest_dir}/restarts" ]] || die "missing subdir: ${rest_dir}/restarts"
[[ -d "${rundir}" ]] || die "rundir not found: ${rundir}"

initdir="${rundir}/initialstate"
mkdir -p "${initdir}"

# ---------- clean target safely ----------
shopt -s nullglob
log "Cleaning old links in: ${initdir}"
rm -f "${initdir}/restart_in_"*.nc "${initdir}/restart_ice_in_"*.nc || true

log "Linking ${nd} restart tiles from ${rest_dir}/restarts → ${initdir}"
log "  prefix: ${rest_str}"

# ---------- link loop ----------
for (( d=0; d<nd; d++ )); do
  dd=$(printf '%04d' "${d}")

  src_o="${rest_dir}/restarts/${rest_str}_restart_out_${dd}.nc"
  src_i="${rest_dir}/restarts/${rest_str}_restart_ice_out_${dd}.nc"

  dst_o="${initdir}/restart_in_${dd}.nc"
  dst_i="${initdir}/restart_ice_in_${dd}.nc"

  if [[ -e "${src_o}" ]]; then
    ln -sf "${src_o}" "${dst_o}"
  else
    log "WARN: missing ocean restart: ${src_o}"
  fi

  if [[ -e "${src_i}" ]]; then
    ln -sf "${src_i}" "${dst_i}"
  else
    log "WARN: missing ice restart:   ${src_i}"
  fi
done

log "Done linking restarts."

