#!/bin/bash

set -ex

while true; do

    # Konfiguration
    screenshot_path="$HOME/Desktop/screenshot.png"
    bridge_ip='192.168.1.115'
    username='Jhw0h63UZOXZCkGsRUvMtAH7kbjWEe1YS1xh0yrl'
    light_id='7'

    # Test, ob die Bridge erreichbar ist
    max_attempts=10
    attempt=0
    while ! ping -c 1 $bridge_ip &>/dev/null; do
        attempt=$((attempt+1))
        echo "Versuch $attempt von $max_attempts: Bridge nicht erreichbar, warte 10 Sekunden..."
        if [ $attempt -ge $max_attempts ]; then
            echo "Bridge nach $max_attempts Versuchen nicht erreichbar, breche Skript ab."
            exit 1
        fi
        sleep 10
    done

    # 1. Screenshot erstellen
    spectacle -b -f -n -o $screenshot_path

    # 2. Durchschnittliche Farbe des Screenshots berechnen und in Ganzzahlen konvertieren
    average_color=$(convert $screenshot_path -resize 1x1\! -format "%[pixel:u]" info:- | tr -d ' ' | sed 's/.*[(]\(.*\)[)].*/\1/' | tr -d '%')
    IFS=',' read r g b _ <<< "$average_color"

    # Konvertiere RGB in xy-Werte
    convertRGBtoXY() {
        # Konvertiere die Eingabewerte von 0-255 zu 0-1
        local r=$(echo "$1 / 255" | bc -l)
        local g=$(echo "$2 / 255" | bc -l)
        local b=$(echo "$3 / 255" | bc -l)

        # Anpassen der Helligkeit der Farben gemäß der Formel
        adjustColor() {
            local color=$1
            if (( $(echo "$color <= 0.04045" | bc -l) )); then
                echo $(echo "$color / 12.92" | bc -l)
            else
                echo $(echo "e(l(($color + 0.055) / 1.055) * 2.4)" | bc -l)
            fi
        }

        r=$(adjustColor $r)
        g=$(adjustColor $g)
        b=$(adjustColor $b)

        # Konvertierung zu XYZ
        local X=$(echo "scale=5; (0.4124 * $r) + (0.3576 * $g) + (0.1805 * $b)" | bc -l)
        local Y=$(echo "scale=5; (0.2126 * $r) + (0.7152 * $g) + (0.0722 * $b)" | bc -l)
        local Z=$(echo "scale=5; (0.0193 * $r) + (0.1192 * $g) + (0.9505 * $b)" | bc -l)

        # Konvertierung zu xy
        local x=$(echo "scale=5; $X / ($X + $Y + $Z)" | bc -l)
        local y=$(echo "scale=5; $Y / ($X + $Y + $Z)" | bc -l)

        # Ausgabe der xy-Werte
        echo "0$x 0$y"
    }

    # Ausführen der Konvertierung
    read x y <<< $(convertRGBtoXY $r $g $b)

    # Setze Helligkeit und Sättigung (Beispielwerte, anpassen nach Bedarf)
    bri=254 # Maximalwert für die Helligkeit
    sat=254 # Maximalwert für die Sättigung

    # 4. Farbe an Philips Hue Lampe senden
    echo "Senden der Farbe an Lampe $light_id: xy-Werte: $x,$y, Helligkeit: $bri, Sättigung: $sat"

    url="http://${bridge_ip}/api/${username}/lights/${light_id}/state"
    #payload="{\"on\": true, \"xy\": [$x, $y], \"bri\": $bri, \"sat\": $sat}"
    payload="{\"on\": true, \"xy\": [$x, $y]}"
    response=$(curl --request PUT --header "Content-Type: application/json" --data "$payload" $url)
    echo $response

    echo "Farbe erfolgreich gesendet!"

    sleep 3

done
