#!/bin/bash

# FAZA 5A - Image Quality (WDR, 3DNR) i FAZA 5B - Storage optimizacija
# Dahua kamere - Digest auth: admin/*** → cred dahua/default

USERNAME="admin"
PASSWORD="$(cred dahua/default)"
LOG_FILE="/home/tropic_bot/.openclaw/workspace/dahua-firmware/settings-phase5-log.json"

# Inicijalizacija loga
echo "{" > "$LOG_FILE"
echo "  \"timestamp\": \"$(date -Iseconds)\"," >> "$LOG_FILE"
echo "  \"phase\": \"5\"," >> "$LOG_FILE"
echo "  \"cameras\": [" >> "$LOG_FILE"

# Definicija kamera s WDR/3DNR postavkama
declare -A WDR_LEVELS
declare -A DNR_LEVELS

WDR_LEVELS[201]=60
DNR_LEVELS[201]=50

WDR_LEVELS[202]=60
DNR_LEVELS[202]=50

WDR_LEVELS[203]=70
DNR_LEVELS[203]=60

WDR_LEVELS[205]=50
DNR_LEVELS[205]=60

WDR_LEVELS[206]=70
DNR_LEVELS[206]=40

WDR_LEVELS[209]=50
DNR_LEVELS[209]=50

WDR_LEVELS[210]=40
DNR_LEVELS[210]=40

WDR_LEVELS[211]=60
DNR_LEVELS[211]=50

WDR_LEVELS[212]=50
DNR_LEVELS[212]=40

WDR_LEVELS[213]=70
DNR_LEVELS[213]=50

WDR_LEVELS[215]=50
DNR_LEVELS[215]=70

WDR_LEVELS[236]=60
DNR_LEVELS[236]=50

WDR_LEVELS[239]=50
DNR_LEVELS[239]=60

# Storage optimizacija kamere (.201, .202, .203, .205, .215)
declare -A STORAGE_FPS
declare -A STORAGE_BITRATE
declare -A STORAGE_GOP

STORAGE_FPS[201]=10
STORAGE_BITRATE[201]=2048
STORAGE_GOP[201]=20

STORAGE_FPS[202]=10
STORAGE_BITRATE[202]=2048
STORAGE_GOP[202]=20

STORAGE_FPS[203]=10
STORAGE_BITRATE[203]=2048
STORAGE_GOP[203]=20

STORAGE_FPS[205]=10
STORAGE_BITRATE[205]=2048
STORAGE_GOP[205]=20

STORAGE_FPS[215]=10
STORAGE_BITRATE[215]=1536
STORAGE_GOP[215]=20

# Funkcija za provjeru grešaka u odgovoru
check_error() {
    local response="$1"
    if echo "$response" | grep -q "Error"; then
        return 1
    fi
    if echo "$response" | grep -q "Bad Request"; then
        return 1
    fi
    return 0
}

# Funkcija za primjenu WDR/3DNR postavki
apply_image_quality() {
    local ip="$1"
    local id="$2"
    local wdr_level="${WDR_LEVELS[$id]}"
    local dnr_level="${DNR_LEVELS[$id]}"
    
    echo "    {" >> "$LOG_FILE"
    echo "      \"ip\": \"$ip\"," >> "$LOG_FILE"
    echo "      \"id\": \"$id\"," >> "$LOG_FILE"
    echo "      \"image_quality\": {" >> "$LOG_FILE"
    
    # Pokušaj 1: VideoColor[0][0] format za WDR
    local wdr_url="http://$ip/cgi-bin/configManager.cgi?action=setConfig&VideoColor[0][0].WDR.Mode=2&VideoColor[0][0].WDR.Level=$wdr_level"
    echo "      \"wdr_attempt1\": {" >> "$LOG_FILE"
    echo "        \"url\": \"$wdr_url\"," >> "$LOG_FILE"
    
    wdr_response=$(curl -s --digest -u "$USERNAME:$PASSWORD" "$wdr_url" 2>&1)
    wdr_status=$?
    
    if check_error "$wdr_response"; then
        echo "        \"status\": \"success\"," >> "$LOG_FILE"
        echo "        \"response\": \"$(echo "$wdr_response" | tr '\n' ' ' | sed 's/"/\\"/g')\"" >> "$LOG_FILE"
        wdr_success=true
    else
        echo "        \"status\": \"failed\"," >> "$LOG_FILE"
        echo "        \"response\": \"$(echo "$wdr_response" | tr '\n' ' ' | sed 's/"/\\"/g')\"" >> "$LOG_FILE"
        wdr_success=false
        
        # Pokušaj 2: Alternativni VideoInMode format
        local wdr_url2="http://$ip/cgi-bin/configManager.cgi?action=setConfig&VideoInMode[0].Config[0].WDR=true"
        echo "      }," >> "$LOG_FILE"
        echo "      \"wdr_attempt2\": {" >> "$LOG_FILE"
        echo "        \"url\": \"$wdr_url2\"," >> "$LOG_FILE"
        
        wdr_response2=$(curl -s --digest -u "$USERNAME:$PASSWORD" "$wdr_url2" 2>&1)
        if check_error "$wdr_response2"; then
            echo "        \"status\": \"success\"," >> "$LOG_FILE"
            echo "        \"response\": \"$(echo "$wdr_response2" | tr '\n' ' ' | sed 's/"/\\"/g')\"" >> "$LOG_FILE"
            wdr_success=true
        else
            echo "        \"status\": \"failed\"," >> "$LOG_FILE"
            echo "        \"response\": \"$(echo "$wdr_response2" | tr '\n' ' ' | sed 's/"/\\"/g')\"" >> "$LOG_FILE"
        fi
    fi
    echo "      }," >> "$LOG_FILE"
    
    # 3DNR - Pokušaj 1: VideoColor[0][0] format
    local dnr_url="http://$ip/cgi-bin/configManager.cgi?action=setConfig&VideoColor[0][0].ThreeDDenoise.Mode=2&VideoColor[0][0].ThreeDDenoise.Level=$dnr_level"
    echo "      \"3dnr_attempt1\": {" >> "$LOG_FILE"
    echo "        \"url\": \"$dnr_url\"," >> "$LOG_FILE"
    
    dnr_response=$(curl -s --digest -u "$USERNAME:$PASSWORD" "$dnr_url" 2>&1)
    
    if check_error "$dnr_response"; then
        echo "        \"status\": \"success\"," >> "$LOG_FILE"
        echo "        \"response\": \"$(echo "$dnr_response" | tr '\n' ' ' | sed 's/"/\\"/g')\"" >> "$LOG_FILE"
        dnr_success=true
    else
        echo "        \"status\": \"failed\"," >> "$LOG_FILE"
        echo "        \"response\": \"$(echo "$dnr_response" | tr '\n' ' ' | sed 's/"/\\"/g')\"" >> "$LOG_FILE"
        dnr_success=false
        
        # Pokušaj 2: Alternativni VideoInOptions format
        local dnr_url2="http://$ip/cgi-bin/configManager.cgi?action=setConfig&VideoInOptions[0].NightOptions.Denoise3D=true"
        echo "      }," >> "$LOG_FILE"
        echo "      \"3dnr_attempt2\": {" >> "$LOG_FILE"
        echo "        \"url\": \"$dnr_url2\"," >> "$LOG_FILE"
        
        dnr_response2=$(curl -s --digest -u "$USERNAME:$PASSWORD" "$dnr_url2" 2>&1)
        if check_error "$dnr_response2"; then
            echo "        \"status\": \"success\"," >> "$LOG_FILE"
            echo "        \"response\": \"$(echo "$dnr_response2" | tr '\n' ' ' | sed 's/"/\\"/g')\"" >> "$LOG_FILE"
            dnr_success=true
        else
            echo "        \"status\": \"failed\"," >> "$LOG_FILE"
            echo "        \"response\": \"$(echo "$dnr_response2" | tr '\n' ' ' | sed 's/"/\\"/g')\"" >> "$LOG_FILE"
        fi
    fi
    echo "      }" >> "$LOG_FILE"
}

# Funkcija za storage optimizaciju
apply_storage_optimization() {
    local ip="$1"
    local id="$2"
    local fps="${STORAGE_FPS[$id]}"
    local bitrate="${STORAGE_BITRATE[$id]}"
    local gop="${STORAGE_GOP[$id]}"
    
    echo "      ," >> "$LOG_FILE"
    echo "      \"storage_optimization\": {" >> "$LOG_FILE"
    echo "        \"target_fps\": $fps," >> "$LOG_FILE"
    echo "        \"target_bitrate\": $bitrate," >> "$LOG_FILE"
    echo "        \"target_gop\": $gop," >> "$LOG_FILE"
    
    # Pokušaj 1: Standardni format (bez table. prefixa)
    local storage_url="http://$ip/cgi-bin/configManager.cgi?action=setConfig&Encode[0].MainFormat[0].Video.FPS=$fps&Encode[0].MainFormat[0].Video.BitRate=$bitrate&Encode[0].MainFormat[0].Video.GOP=$gop"
    echo "        \"attempt1\": {" >> "$LOG_FILE"
    echo "          \"format\": \"standard\"," >> "$LOG_FILE"
    echo "          \"url\": \"$storage_url\"," >> "$LOG_FILE"
    
    storage_response=$(curl -s --digest -u "$USERNAME:$PASSWORD" "$storage_url" 2>&1)
    
    if check_error "$storage_response"; then
        echo "          \"status\": \"success\"," >> "$LOG_FILE"
        echo "          \"response\": \"$(echo "$storage_response" | tr '\n' ' ' | sed 's/"/\\"/g')\"" >> "$LOG_FILE"
        echo "        }" >> "$LOG_FILE"
    else
        echo "          \"status\": \"failed\"," >> "$LOG_FILE"
        echo "          \"response\": \"$(echo "$storage_response" | tr '\n' ' ' | sed 's/"/\\"/g')\"" >> "$LOG_FILE"
        echo "        }," >> "$LOG_FILE"
        
        # Pokušaj 2: Alternativni format s table. prefixom
        local storage_url2="http://$ip/cgi-bin/configManager.cgi?action=setConfig&table.Encode[0].MainFormat[0].Video.FPS=$fps&table.Encode[0].MainFormat[0].Video.BitRate=$bitrate&table.Encode[0].MainFormat[0].Video.GOP=$gop"
        echo "        \"attempt2\": {" >> "$LOG_FILE"
        echo "          \"format\": \"table_prefix\"," >> "$LOG_FILE"
        echo "          \"url\": \"$storage_url2\"," >> "$LOG_FILE"
        
        storage_response2=$(curl -s --digest -u "$USERNAME:$PASSWORD" "$storage_url2" 2>&1)
        
        if check_error "$storage_response2"; then
            echo "          \"status\": \"success\"," >> "$LOG_FILE"
            echo "          \"response\": \"$(echo "$storage_response2" | tr '\n' ' ' | sed 's/"/\\"/g')\"" >> "$LOG_FILE"
        else
            echo "          \"status\": \"failed\"," >> "$LOG_FILE"
            echo "          \"response\": \"$(echo "$storage_response2" | tr '\n' ' ' | sed 's/"/\\"/g')\"" >> "$LOG_FILE"
        fi
        echo "        }" >> "$LOG_FILE"
    fi
    
    echo "      }" >> "$LOG_FILE"
}

# Procesuiraj sve kamere
FIRST=true
for id in 201 202 203 205 206 209 210 211 212 213 215 236 239; do
    ip="192.168.0.$id"
    
    echo "Processing camera .$id ($ip)..."
    
    if [ "$FIRST" = true ]; then
        FIRST=false
    else
        echo "    ," >> "$LOG_FILE"
    fi
    
    # Primijeni WDR/3DNR na sve kamere
    apply_image_quality "$ip" "$id"
    
    # Primijeni storage optimizaciju samo za .201, .202, .203, .205, .215
    if [ "$id" = "201" ] || [ "$id" = "202" ] || [ "$id" = "203" ] || [ "$id" = "205" ] || [ "$id" = "215" ]; then
        apply_storage_optimization "$ip" "$id"
    fi
    
    echo "    }" >> "$LOG_FILE"
done

echo "  ]," >> "$LOG_FILE"
echo "  \"verification\": {" >> "$LOG_FILE"
echo "    \"status\": \"pending\"" >> "$LOG_FILE"
echo "  }" >> "$LOG_FILE"
echo "}" >> "$LOG_FILE"

echo ""
echo "FAZA 5A i 5B završene!"
echo "Log spremljen u: $LOG_FILE"
