#!/usr/bin/bash

set -e

# -------------------------------------------------------------------
# Logging setup
# -------------------------------------------------------------------
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
log() {
    echo -e "$(date '+%Y-%m-%d %H:%M:%S')  $1" | tee -a "$LOG_FILE"
}

# -------------------------------------------------------------------
# Operator input validation
# -------------------------------------------------------------------
ALLOWED_OPERATORS=( ATT TMO FWV CNX NXT SHACC 3UK EE VODAFONE VMO2 )

if [ $# -ne 1 ]; then
    echo "Usage: $0 <operator>"
    exit 1
fi

OPERATOR=$1

# Convert to lowercase
OPERATOR="${OPERATOR,,}"

if ! printf '%s\n' "${ALLOWED_OPERATORS[@],,}" | grep -qx "$OPERATOR"; then
  echo "ERROR: Invalid operator '$1'"
  echo "Allowed operators: ${ALLOWED_OPERATORS[*]}"
  exit 1
fi

LOG_FILE="$SCRIPT_DIR/${OPERATOR}_LTE_OMFileToS3_$(date '+%Y%m%d_%H%M%S').log"

# -------------------------------------------------------------------
# Lock file to prevent overlapping cron runs
# -------------------------------------------------------------------
LOCKFILE="/tmp/SyncLTEOMFileToS3_${OPERATOR}.lock"
exec 200>$LOCKFILE
flock -n 200 || {
    echo "$(date '+%Y-%m-%d %H:%M:%S')  Another instance is running. Exiting." >> "$LOG_FILE"
    exit 1
}


# -------------------------------------------------------------------
# Input / configuration
# -------------------------------------------------------------------
BASE_DIR="/opt/device/logs/onecell/0005B9"       # Base directory to scan
MINUTES=15                                  	 # Lookback window
ACCOUNT_ID=$(/usr/local/bin/aws sts get-caller-identity --query "Account" --output text)
#REGION=$(/usr/local/bin/aws configure get region)
REGION=ap-southeast-1
###########################################

BUCKET=$ACCOUNT_ID-${REGION}-onecell-files  #s3 bucket name

now="$(date +"%T")"
log "Script started at $now"
echo -e "\nOperator: $OPERATOR" | tee -a $LOG_FILE
echo "Account ID: $ACCOUNT_ID" | tee -a $LOG_FILE
echo "Region:     $REGION"     | tee -a $LOG_FILE
echo -e "S3 bucket:  $BUCKET\n"   | tee -a $LOG_FILE

log "Scanning directory: $BASE_DIR"
log "Finding PM files updated in last $MINUTES minutes..."

FILES=$(find "$BASE_DIR" -type f -name "*PERFORMANCE*" -mmin -"$MINUTES")

if [ -z "$FILES" ]; then
    log "No PM files updated in the last $MINUTES minutes."
    exit 0
fi

for FILE in $FILES; do

    BASENAME=$(basename "$FILE")

    DeviceID=$(basename "$(dirname "$FILE")")
    
    # Extract 14-digit timestamp
    TIMESTAMP=$(echo "$BASENAME" | grep -oE '[0-9]{14}')

    if [ -z "$TIMESTAMP" ]; then
        log "Skipping file (no timestamp found): $FILE"
        continue
    fi

    # Extract YYYYMMDD from timestamp
    DATE=${TIMESTAMP:0:8}

    S3_OPERATOR="$OPERATOR"
    case "$OPERATOR" in
      3uk|ee|vodafone|vmo2)
      log "operator is $OPERATOR"
      S3_OPERATOR="fwv"
      ;;
    esac

    DEST="s3://$BUCKET/onecell/$S3_OPERATOR/LTE/PM/${DeviceID}/$DATE/"
    #log "Copying: $FILE → $DEST\n"
    #/usr/local/bin/aws s3 cp "$FILE" "$DEST"
	#
    #if [ $? -eq 0 ]; then
    #   log "File copied successfully: $FILE"
	#
    #   log "Deleting $FILE"
    #   if rm -f "$FILE"; then
    #      log "File deleted: $FILE"
    #   else
    #      log "WARNING: Unable to delete file: $FILE"
    #      log "Skipping deletion and continuing..."
    #   fi
    #else
    #   log "ERROR: Failed to copy file to S3: $FILE"
    #fi

	log "Moving: $FILE → $DEST\n"
	/usr/local/bin/aws s3 mv "$FILE" "$DEST"

	if [ $? -eq 0 ]; then
		log "File Moved successfully: $FILE"
	else
		log "ERROR: File Upload Failed: $FILE"
	fi

log "===========================================\n"

done

log "All eligible LTE PM files moved successfully."

