#!/usr/bin/env bash

set -u

if [[ "$#" -ne 2 ]]; then
  printf 'uso: %s ARCHIVO {clean|invalid}\n' "$0" >&2
  exit 64
fi

input_path=$1
mode=$2

if [[ ! -f "$input_path" ]]; then
  printf 'error=input-not-found path=%s\n' "$input_path" >&2
  exit 66
fi

case "$mode" in
  clean|invalid) ;;
  *)
    printf 'error=unknown-mode mode=%s\n' "$mode" >&2
    exit 64
    ;;
esac

line_number=0
while IFS=$'\t' read -r timestamp level message; do
  line_number=$((line_number + 1))

  if [[ "$line_number" -eq 1 ]]; then
    continue
  fi

  if [[ "$mode" == "invalid" && "$line_number" -eq 4 ]]; then
    printf 'error=invalid-record line=%s\n' "$line_number" >&2
    exit 65
  fi

  if [[ -z "$timestamp" || -z "$level" || -z "$message" ]]; then
    printf 'error=incomplete-record line=%s\n' "$line_number" >&2
    exit 65
  fi

  printf 'time=%s level=%s message=%s\n' "$timestamp" "$level" "$message"
done < "$input_path"

printf 'processed=%s mode=%s\n' "$((line_number - 1))" "$mode" >&2
