#!/bin/bash

# ==========================================================
# OneDrive Cache Reset + Restart Script - macOS
# ==========================================================

echo "INFO: Starting OneDrive cache reset..."

if [[ ! "$HOME" =~ ^/Users/[a-zA-Z0-9._-]+$ ]]; then
    echo "ERROR: Invalid HOME path."
    exit 1
fi

# ----------------------------------------------------------
# Find OneDrive Application
# ----------------------------------------------------------
ONEDRIVE_PATHS=(
    "/Applications/OneDrive.app"
    "$HOME/Applications/OneDrive.app"
)

ONEDRIVE_APP=""

for path in "${ONEDRIVE_PATHS[@]}"; do
    if [[ -d "$path" ]]; then
        ONEDRIVE_APP="$path"
        break
    fi
done

# ----------------------------------------------------------
# Check Installation
# ----------------------------------------------------------
if [[ -z "$ONEDRIVE_APP" ]]; then
    echo "ERROR: OneDrive is not installed."
    exit 1
fi

echo "INFO: OneDrive found at:"
echo "$ONEDRIVE_APP"

# ----------------------------------------------------------
# Stop OneDrive
# ----------------------------------------------------------
if pgrep -x "OneDrive" > /dev/null 2>&1; then

    echo "INFO: Stopping OneDrive..."

    # Gracefully quit OneDrive
    osascript -e 'quit app "OneDrive"'

    if [[ $? -ne 0 ]]; then
        echo "WARNING: Failed to send quit command to OneDrive."
    fi

    sleep 10

    # Force stop if still running
    if pgrep -x "OneDrive" > /dev/null 2>&1; then
        echo "INFO: Force killing OneDrive..."

        pkill -9 "OneDrive"

        if [[ $? -ne 0 ]]; then
            echo "ERROR: Failed to kill OneDrive process."
            exit 1
        fi
    fi

    echo "INFO: OneDrive stopped."

else
    echo "INFO: OneDrive is not running."
fi

# ----------------------------------------------------------
# Clear OneDrive Cache
# ----------------------------------------------------------
CACHE_PATH="$HOME/Library/Caches/com.microsoft.OneDrive"

echo "INFO: Clearing OneDrive cache..."

if [[ -d "$CACHE_PATH" ]]; then

    rm -rf "$CACHE_PATH"

    if [[ $? -eq 0 ]]; then
        echo "INFO: OneDrive cache cleared successfully."
    else
        echo "ERROR: Failed to clear OneDrive cache."
        exit 1
    fi

else
    echo "WARNING: Cache folder does not exist."
fi

# ----------------------------------------------------------
# Restart OneDrive
# ----------------------------------------------------------
echo "INFO: Starting OneDrive..."

open "$ONEDRIVE_APP"

if [[ $? -ne 0 ]]; then
    echo "ERROR: Failed to start OneDrive."
    exit 1
fi

sleep 15
echo "INFO: OneDrive reset completed successfully."