#!/usr/bin/bash

set -e

# -------------------------------------------------------------------
# Logging setup
# -------------------------------------------------------------------
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
LOG_FILE="$SCRIPT_DIR/log/NR_PMFileToS3_$(date '+%Y%m%d_%H%M%S').log"

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

# -------------------------------------------------------------------
log() {
    echo -e "$(date '+%Y-%m-%d %H:%M:%S')  $1" | tee -a "$LOG_FILE"
}

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

OPERATOR=$1

if [[ ! "$OPERATOR" =~ ^[a-z]{3}$ && ! "$OPERATOR" =~ ^[A-Z]{3}$ ]]; then
    echo "ERROR: Operator Name must be 3 letters, either all small or all caps."
    echo "Examples: att, ATT"
    exit 1
fi

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

###########################################
# INPUTS
###########################################
BASE_DIR="/opt/device/P20_logs/"
PM_FOLDER="PERFORMANCE"
MINUTES=15

ACCOUNT_ID=$(/usr/bin/aws sts get-caller-identity --query "Account" --output text)
REGION="ap-south-1"
###########################################

BUCKET="${ACCOUNT_ID}-${REGION}-onecell-files"

log "Script Started"
log "Account ID: $ACCOUNT_ID"
log "Region:     $REGION"
log "S3 bucket:  $BUCKET"
log "\n"
# -------------------------------------------------------------------
# Iterate per device
# -------------------------------------------------------------------
for DEVICE_PATH in "$BASE_DIR/$OPERATOR"/*; do

    if [ -d "$DEVICE_PATH" ]; then
		DEVICE_ID="$(basename "$DEVICE_PATH")"
	else
		log "Skipping path (not a directory or does not exist): $DEVICE_PATH"
		continue
	fi


    DEVICE_ID="$(basename "$DEVICE_PATH")"
    PM_PATH="$DEVICE_PATH/$PM_FOLDER"

    if [ ! -d "$PM_PATH" ]; then
		log "-------------------------------------------"
        log "Skipping device : $DEVICE_ID (no $PM_FOLDER folder)"
        continue
    fi
	
	log "-------------------------------------------"
    log "Scanning PM files under device: $DEVICE_ID"

    FILES=$(find "$PM_PATH" \
        -maxdepth 1 \
        -type f \
        -mmin -"$MINUTES" \
        2>/dev/null || true)

    if [ -z "$FILES" ]; then
        log "No PM files found for device $DEVICE_ID in last $MINUTES minutes"
        continue
    fi

    # -------------------------------------------------------------------
    # Process each file for this device
    # -------------------------------------------------------------------
    for FILE in $FILES; do

        BASENAME=$(basename "$FILE")

        DATE=$(echo "$BASENAME" | grep -oE '[0-9]{8}' | head -n1)
        if [ -z "$DATE" ]; then
            log "Skipping file (no date found): $FILE"
            continue
        fi

        DEST="s3://$BUCKET/onecell/$OPERATOR/NR/PM/$DATE/"
        log "Copying: $FILE → $DEST"

        if /usr/bin/aws s3 cp "$FILE" "$DEST"; 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"
            #fi
        else
            log "ERROR: Failed to copy file to S3: $FILE"
        fi

        log "-------------------------------------------"
    done
done
log "\n"
log "-------------------------------------------"
log "All eligible NR PM files processed successfully."
log "Script Execution Completed"

