#!/bin/bash
#
# icc_profile_apply - ICC Color Profile Manager for KDE Plasma
#
# Enables, disables, or shows status of ICC color profiles
# for all connected displays using kscreen-doctor.
#
# Usage: icc_profile_apply enable|disable|status
#
# Dependencies: kscreen-doctor, jq
#

ICC_PROFILE_PATH="/usr/share/color/icc/colord/ECI-RGBv1.icc"

show_usage() {
    echo "Usage: $0 enable|disable|status"
    echo "  enable  - Apply ICC color profile to all displays"
    echo "  disable - Revert to sRGB color space"
    echo "  status  - Show current ICC profile status for all displays"
    exit 1
}

show_status() {
    echo "=== ICC Profile Status ==="
    echo ""
    
    # Parse each connected output and show its ICC profile status
    kscreen-doctor -j 2>/dev/null | jq -r '.outputs[] | "\(.name)|\(.iccProfilePath // "None")"' | while IFS='|' read -r name profile; do
        echo "Display: $name"
        
        # Check if ICC profile source is active in KWin config
        if grep -q '"colorProfileSource": "ICC"' ~/.config/kwinoutputconfig.json 2>/dev/null; then
            echo "  Status: ACTIVE"
            echo "  ICC Profile: $profile"
        else
            echo "  Status: INACTIVE"
            echo "  ICC Profile: None"
        fi
    done
}

# Check for required dependency
if ! command -v kscreen-doctor &> /dev/null; then
    echo "Error: kscreen-doctor is required but not installed"
    exit 1
fi

# Parse command line argument
case "$1" in
    enable)
        ACTION="enable"
        ;;
    disable)
        ACTION="disable"
        ;;
    status)
        show_status
        exit 0
        ;;
    *)
        show_usage
        ;;
esac

# Get list of connected display outputs
OUTPUTS=$(kscreen-doctor -j 2>/dev/null | jq -r '.outputs[].name')

if [[ -z "$OUTPUTS" ]]; then
    echo "Error: No display outputs found"
    exit 1
fi

# Apply ICC profile settings to each output
for OUTPUT in $OUTPUTS; do
    if [[ "$ACTION" = "enable" ]]; then
        # Apply ICC profile and configure color settings
        kscreen-doctor "output.$OUTPUT.iccprofile.$ICC_PROFILE_PATH" 2>/dev/null
        kscreen-doctor "output.$OUTPUT.colorprofilesource.ICC" 2>/dev/null
        kscreen-doctor "output.$OUTPUT.sdrGamut.100" 2>/dev/null
        
        # Create marker file to prevent auto-apply on next boot
        if [[ ! -e "$HOME/.kdebiglinux/icc_profile_used" ]]; then
            mkdir -p ~/.kdebiglinux
            > "$HOME/.kdebiglinux/icc_profile_used"
        fi
    else
        # Remove ICC profile and revert to sRGB
        kscreen-doctor "output.$OUTPUT.iccprofile." 2>/dev/null
        kscreen-doctor "output.$OUTPUT.colorprofilesource.sRGB" 2>/dev/null
    fi
done

echo "ICC profile $ACTION successfully for outputs: $OUTPUTS"
