#!/bin/bash

# command line arguments
dstr=$1
dend=$2
if [ -z "$dstr" -o -z "$dend" ]; then
  echo "you must provide start and end dates in YYYY-MM-DDThh:mm:ss format"
  echo "such as ./subset.sh 2019-08-29T00:00:00 2019-09-05T00:00:00"
  exit
fi

# load required modules
module load cdo
module load nco

# loop over files and create files with dates
lst=`ls -al ERA5.*.200618.nc | awk '{print $9}'`
for i in $lst
do
  i_txt=${i/.nc/.txt}
  if [ -f "$i_txt" ]; then
    echo "$i_txt exists"
  else
    echo "processing $i"
    cdo -s showtimestamp $i | tr " " "\n" | grep - >& $i_txt
  fi  
done

# find start and end indexes for given dates and files that have the data
lstr=""
fstr=""
lend=""
fend=""
for i in $lst
do
  dumm=""
  dumm=`awk -v dstr=$dstr '{if($1==dstr) print NR}' ${i/.nc/.txt}`
  if [ -n "$dumm" ]; then
    fstr="$i"
    lstr="$dumm"
  fi
  dumm=""
  dumm=`awk -v dend=$dend '{if($1==dend) print NR}' ${i/.nc/.txt}`
  if [ -n "$dumm" ]; then
    fend="$i"
    lend="$dumm"
  fi
done
echo "$fstr - $lstr"
echo "$fend - $lend"

# subset data
if [ -n "$fstr" -a  -n "$fend" ]; then
  if [ "$fstr" == "$fend" ]; then
    echo "same"
    suffix="${dstr}_${dend}.nc"
    ncks -d time,$((lstr-1)),$((lend-1)) $fstr ${fstr/.nc/$suffix}
  else
    do_process=0
    for i in $lst
    do
      if [ "$i" == "$fstr" ]; then
        do_process=1
      fi
      if [ "$do_process" -eq "1" ]; then
        ntime=`cdo -s ntime $i`
        if [ "$i" == "$fstr" ]; then
          suffix="${dstr}_end.nc"
          ncks -d time,$((lstr-1)),$((ntime-1)) $fstr ${fstr/.nc/$suffix}
        fi
        if [ "$i" == "$fend" ]; then
          suffix="start_${dend}.nc"
          ncks -d time,0,$((lend-1)) $fend ${fend/.nc/$suffix}
        fi
      fi
      if [ "$i" == "$fend" ]; then
        break
      fi
    done
  fi
fi
