#! /usr/bin/gawk -f
# Last edited on 2019-10-28 14:06:58 by jstolfi

# Reads from stdin a bunch of price file names of the form
# "{TDLO}--{TDHI}-{EX}-{CR}-{TU}.txt"
# They must be sorted in ascending order of {TDLO},
# and the intervals {TDLO .. TDHI} must overlap without gaps.
# All names must have the same {EX}, {CR}, and {TU}.

# Writes to stdout a line "{GTDLO} {GTDHI} {EX} {CR} {TU}" 
# where {GTDLO .. GTDHI} is the union of all intervals {TDLO .. TDHI}.

BEGIN{ 
  abort = -1
  # Global data of the union:
  gdlo = ""; gdhi = ""; gex = ""; gcr = ""; gtu = ""
}

(abort >= 0) { exit(abort) }

/^20(09|[12][0-9])-/ {
  # Extract datetime span from file name:
  gsub(/[.]txt *$/, "", $0)
  gsub(/^[ ]*/, "", $0)
  gsub(/--/, " ", $0)
  $0 = gensub(/-([A-Z])/, " \\1", "g", $0)
  $0 = gensub(/([A-Z])-/, "\\1 ", "g", $0)
  if (NF != 5) { printf "** bug NF %d\n  \"%s\"\n", NF, $0 > "/dev/stderr"; abort = 1; exit(1) }
  dlo = $1; dhi = $2; ex = $3; cr = $4; tu = $5
  if (dlo > dhi) { printf "** bug dlo,dhi\n" > "/dev/stderr"; abort = 1; exit(1) }
  # Unite into global span, check for gaps:
  if (gdlo == "") { 
      gdlo = dlo; gdhi = dhi; gex = ex; gcr = cr; gtu = tu;
  } else {
    if (dlo < gdlo) { printf "** bug sort\n" > "/dev/stderr"; abort = 1; exit(1) }
    if (dlo > gdhi) { printf "** GAP? %s .. %s\n", gdhi, dlo > "/dev/stderr"; abort = 1; }
    if (ex != gex) { printf "** bad ex %s %s\n", ex, gex > "/dev/stderr"; abort = 1; }
    if (cr != gcr) { printf "** bad cr %s %s\n", cr, gcr > "/dev/stderr"; abort = 1; }
    if (tu != gtu) { printf "** bad tu %s %s\n", tu, gtu > "/dev/stderr"; abort = 1; }
    if (dhi > gdhi) { gdhi = dhi }
  }
  next
}

// { printf "** bug dlo,dhi\n" > "/dev/stderr"; abort = 1; exit(1) }

END { 
  if (abort >= 0) { exit(abort); }
  print gdlo, gdhi, gex, gcr, gtu
}