#!/bin/bash
# sync_json_to_wasabi.sh
# Uploads JSON listing files to Wasabi nstjson bucket and removes local copies.
# Run every 15 minutes via cron to match listing update frequency.
#
# Cron entry:
# */15 * * * * /bin/bash /home/bonstdata3/public_html/sync_json_to_wasabi.sh >> /home/bonstdata3/public_html/logs/sync_json.log 2>&1

JSON_DIR="/home/bonstdata3/public_html/json/"
BUCKET="s3://nstjson/"
PROFILE="nstphotos"
ENDPOINT="https://s3.wasabisys.com"
AWS="/usr/local/bin/aws"
LOG_DATE=$(date '+%Y-%m-%d %H:%M:%S')

# TEST LIMIT — set to 0 for production (no limit), or any number to cap uploads
# Example: TEST_LIMIT=10 will only upload 10 files per run
TEST_LIMIT=0

# Count files before upload
FILE_COUNT=$(find "$JSON_DIR" -name "*.json" | wc -l)

if [ "$FILE_COUNT" -eq 0 ]; then
    echo "[$LOG_DATE] No JSON files to upload."
    exit 0
fi

# Apply test limit if set
if [ "$TEST_LIMIT" -gt 0 ]; then
    echo "[$LOG_DATE] TEST_LIMIT set to $TEST_LIMIT — uploading $TEST_LIMIT of $FILE_COUNT files."
    FILES_TO_UPLOAD=$(find "$JSON_DIR" -name "*.json" | head -n "$TEST_LIMIT")
else
    echo "[$LOG_DATE] Starting upload of $FILE_COUNT JSON files to Wasabi..."
    FILES_TO_UPLOAD=$(find "$JSON_DIR" -name "*.json")
fi

# Upload each file individually when limit is set, otherwise use sync
if [ "$TEST_LIMIT" -gt 0 ]; then
    UPLOADED=0
    while IFS= read -r file; do
        FILENAME=$(basename "$file")
        $AWS s3 cp "$file" "${BUCKET}${FILENAME}" \
            --profile "$PROFILE" \
            --endpoint-url "$ENDPOINT" \
            --quiet
        if [ $? -eq 0 ]; then
            rm -f "$file"
            UPLOADED=$((UPLOADED + 1))
        else
            echo "[$LOG_DATE] ERROR: Failed to upload $FILENAME"
        fi
    done <<< "$FILES_TO_UPLOAD"
    echo "[$LOG_DATE] Test upload complete. $UPLOADED files uploaded and removed from local server."
else
    # Sync local json/ folder to Wasabi
    $AWS s3 sync "$JSON_DIR" "$BUCKET" \
        --profile "$PROFILE" \
        --endpoint-url "$ENDPOINT" \
        --quiet

    # Check if sync succeeded
    if [ $? -eq 0 ]; then
        # Delete local JSON files after successful upload
        find "$JSON_DIR" -name "*.json" -delete
        echo "[$LOG_DATE] Upload complete. $FILE_COUNT files uploaded and removed from local server."
    else
        echo "[$LOG_DATE] ERROR: Upload failed. Local files retained for next attempt."
        exit 1
    fi
fi