#!/usr/bin/env bash
# Check for changes in application configurations

set -euo pipefail

# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'

echo -e "${GREEN}Checking application configuration changes...${NC}\n"

# Function to check if file has changed
check_config() {
    local app_name="$1"
    local source_path="$2"
    local backup_path="$3"
    
    if [ ! -e "$source_path" ]; then
        echo -e "${RED}✗ $app_name: Source not found${NC}"
        return
    fi
    
    if [ ! -e "$backup_path" ]; then
        echo -e "${YELLOW}⚠ $app_name: No backup exists${NC}"
        return
    fi
    
    if diff -q "$source_path" "$backup_path" >/dev/null 2>&1; then
        echo -e "${GREEN}✓ $app_name: Up to date${NC}"
    else
        echo -e "${YELLOW}⚠ $app_name: Has changes${NC}"
    fi
}

# Check each application
echo "Checking configurations..."

# NPM
if [ -f ~/.npmrc ] && [ -f ~/dotfiles/.npmrc ]; then
    check_config "NPM config" ~/.npmrc ~/dotfiles/.npmrc
fi

# SSH
if [ -f ~/.ssh/config ]; then
    echo -e "${YELLOW}! SSH config: Manual check required (contains sensitive data)${NC}"
fi

# LaunchBar
if [ -d "$HOME/Library/Application Support/LaunchBar" ]; then
    # Check if backup exists
    if [ -d "$HOME/dotfiles/macos-apps/LaunchBar" ]; then
        echo -e "${YELLOW}! LaunchBar: Run backup script to check for changes${NC}"
    else
        echo -e "${YELLOW}⚠ LaunchBar: No backup exists${NC}"
    fi
fi

# Hazel
if [ -f "$HOME/Library/Application Support/Hazel/hazelrules.db" ]; then
    check_config "Hazel rules" \
        "$HOME/Library/Application Support/Hazel/hazelrules.db" \
        "$HOME/dotfiles/macos-apps/Hazel/hazelrules.db"
fi

# Git config
check_config "Git config" ~/.gitconfig ~/dotfiles/git/.gitconfig

echo -e "\n${GREEN}Check complete!${NC}"
echo -e "To backup changed configs, run: ${YELLOW}~/dotfiles/macos-apps/backup-app-configs.sh${NC}"