#!/bin/bash

set -euo pipefail

# sanity checking
if [[ $# -ne 1 ]] ; then
  echo 'usage: v <file>'
  exit 0
fi
if ! [ -f "$1" ]; then
  echo "file not found: '$1'"
  exit 1
fi

# what should we pass for bat --file-name?
fname="$1"
fname="${fname%*.gz}"
fname="${fname/.geojson/.json}"

# go
case "$1" in
  # json
  *.json    | *.geojson)      cat "$1" | jq . | bat --file-name "$fname" ;;
  *.json.gz | *.geojson.gz) gzcat "$1" | jq . | bat --file-name "$fname" ;;

  # tar
  *.tar)    tar -tvf  "$1" | bat --file-name "$fname" ;;
  *.tar.gz) tar -ztvf "$1" | bat --file-name "$fname" ;;

  # csv
  *.csv)      cat "$1" | vd - -f csv ;;
  *.csv.gz) gzcat "$1" | vd - -f csv ;;
  *.xlsx)    xlsx "$1" | vd - -f csv ;;

  # fallbacks
  *.gz)     gzcat "$1" | bat --file-name "$fname" ;;
  *.zip) unzip -v "$1" | bat --file-name "$fname" ;;
  *) bat "$1" ;;
esac