#!/bin/bash

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
. $DIR/../functions/internal/utils

NAMESPACE=$1
LABEL_SELECTOR=$2
LABEL_VALUE=$3
OUTPUT_DIR=$4

echo "- ${COLOR_BLUE}$LABEL_SELECTOR:$LABEL_VALUE${TEXT_RESET}"

POD=$(oc -n $NAMESPACE get pods -l "$LABEL_SELECTOR=$LABEL_VALUE" -o jsonpath="{.items[0].metadata.name}" 2>/dev/null) || { echo_warning "  Error fetching pods with label: $LABEL_SELECTOR=$LABEL_VALUE"; exit 0; }

LOGFILES=$(oc -n $NAMESPACE exec $POD -- find /tmp/ansible-operator/runner/ -name stdout 2>/dev/null)
if [[ "$?" == "1" ]]; then
  echo_dim "- No reconcile logs available in $POD"
  exit 0
fi

TMP_DIR=${OUTPUT_DIR}/tmp-$LABEL_VALUE
mkdir -p $TMP_DIR

oc -n $NAMESPACE exec $POD -- tar -czf - $LOGFILES > $TMP_DIR/ansible-logs-$LABEL_VALUE.tgz 2> /dev/null
if [[ ! -e "$TMP_DIR/ansible-logs-$LABEL_VALUE.tgz" ]]; then
  # Fail if the archive wasn't created
  echo_warning "  Error generating tgz in $POD"
  echo_warning "  NAMESPACE/POD: $NAMESPACE/$POD"
  echo_warning "  LOGFILES: $LOGFILES"
  exit 0
fi

tar -xf $TMP_DIR/ansible-logs-$LABEL_VALUE.tgz -C $TMP_DIR --no-same-owner 2> /dev/null
if [[ "$?" == "0" ]]; then
  rm $TMP_DIR/ansible-logs-$LABEL_VALUE.tgz
else
  # Fail if we couldn't unpack the archive
  echo_warning "  Unable to extract logs from $TMP_DIR/ansible-logs-$LABEL_VALUE.tgz"
  exit 0
fi

for API_DIR in $TMP_DIR/tmp/ansible-operator/runner/*
do
  API=$(basename $API_DIR)
  for VERSION_DIR in $API_DIR/*/
  do
    VERSION=$(basename $VERSION_DIR)
    for KIND_DIR in $VERSION_DIR/*/
    do
      KIND=$(basename $KIND_DIR)
      # Use lowercase version of $KIND for the directory name
      RLOG_DIR=${OUTPUT_DIR}/reconcile-logs/$NAMESPACE/${KIND,,}
      mkdir -p $RLOG_DIR

      echo_dim "  - ${KIND,,}.$API/$VERSION"
      for INSTANCE_DIR in $KIND_DIR/$NAMESPACE/*/
      do
        INSTANCE_NAME=$(basename $INSTANCE_DIR)
        mkdir -p $RLOG_DIR/$INSTANCE_NAME

        for RECONCILE_LOG in $INSTANCE_DIR/artifacts/*/stdout
        do
          EPOC=$(stat -c '%Y' $RECONCILE_LOG)
          TIMESTAMP=$(date --date=@$EPOC +"%Y%m%d-%H%M%S")
          cat $RECONCILE_LOG | sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g" > ${RLOG_DIR}/$INSTANCE_NAME/$TIMESTAMP.log
        done
      done # INSTANCE_DIR
    done  # KIND_DIR
  done  # VERSION_DIR
done  # API_DIR

rm -rf $TMP_DIR
