#!/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_LogFileToS3_$(date '+%Y%m%d_%H%M%S').log"

# -------------------------------------------------------------------
# Lock file to prevent overlapping cron runs
# ------------------------------------------------------------------- 
LOCKFILE="/tmp/SyncLTELogFileToS3_${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
# -------------------------------------------------------------------
Manual_Device_List="0005B951D406,0005B9531580"
AUTO_FETCH_DEVICE=true   # true/false
BASE_ONECELL_DIR="/opt/device/logs/onecell/0005B9"

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
MINUTES=15

#################################################
IFS=',' read -ra devices <<< "$Manual_Device_List"
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

# === Sync window ===
numOfDaysToSync=0
numOfHoursToSync=0
numOfMinutesToSync=${MINUTES}
minutes=$((numOfDaysToSync * 24 * 60 + numOfHoursToSync * 60 + numOfMinutesToSync))
log "Sync window: ${numOfDaysToSync} day(s), ${numOfHoursToSync} hour(s), ${numOfMinutesToSync} minute(s) ->     Total: ${minutes} minutes"


declare -a devices

if [ "$AUTO_FETCH_DEVICE" = "true" ]; then
    log "AUTO_FETCH_DEVICE is enabled. Scanning devices under $BASE_ONECELL_DIR"

    if [ ! -d "$BASE_ONECELL_DIR" ]; then
        log "ERROR: Base directory does not exist: $BASE_ONECELL_DIR"
        exit 1
    fi

    # Find device directories at depth */*/*
    while IFS= read -r dir; do
        device=$(basename "$dir")
        devices+=("$device")
    done < <(find "$BASE_ONECELL_DIR" -mindepth 3 -maxdepth 3 -type d)

    if [ ${#devices[@]} -eq 0 ]; then
        log "No devices found under $BASE_ONECELL_DIR"
        exit 0
    fi
else
    log "AUTO_FETCH_DEVICE is disabled. Using Manual_Device_List"
    IFS=',' read -ra devices <<< "$Manual_Device_List"
fi


# === Process each device ===
for device in "${devices[@]}"; do
    log "\n"
    log "PROCESSING DEVICE: $device"

    part1=$(echo "$device" | sed 's/^\(......\).*$/\1/')
    part2=$(echo "$device" | sed 's/^\(........\).*$/\1/')
    part3=$(echo "$device" | sed 's/^\(..........\).*$/\1/')

    sourcedir="/opt/device/logs/onecell/$part1/$part2/$part3/$device"
	
    files_to_sync=$(find "$sourcedir" -maxdepth 1 -type f -iname '*_DEBUG_*' -mmin -"${minutes}")

    if [ -z "$files_to_sync" ]; then
            log "No DEBUG files found for $device in the last $minutes minutes."
            continue
    fi

	
    # Upload each file to s3 bucket
    for FILE in $files_to_sync; do
        BASENAME=$(basename "$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/logs/${device}/$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 "======================================="
    done
done

log "All eligible LTE files moved successfully."


