#!/bin/bash

FILE_PATH="/usr/sbin/mx-interface-mgmt"

function test_pass_result {
        if [ $1 -eq 0 ]; then
                echo -e "[\e[32mPASS\e[0m] $2"
        else
                echo -e "[\e[31mFAIL\e[0m] $2"
        fi
}

function test_fail_result {
        if [ $1 -eq 0 ]; then
                echo -e "[\e[31mFAIL\e[0m] $2"
        else
                echo -e "[\e[32mPASS\e[0m] $2"
        fi
}

# Test 1: Check if tool is installed
test -e $FILE_PATH
test_pass_result $? "Test 1: Check if tool is installed"

# check if device supports audio
result=$(bash $FILE_PATH audio get_speaker_status 2>&1)
if [[ "$result" == "Error: audio control is not available" ]]; then
        echo "This device does not support audio control"
        exit 1
fi

# Test 2: Invalid audio command
bash $FILE_PATH audio invalid_cmd >/dev/null 2>&1
test_fail_result $? "Test 2: Invalid audio command"

# Test 3: Missing argument for set_speaker_status
bash $FILE_PATH audio set_speaker_status >/dev/null 2>&1
test_fail_result $? "Test 3: Missing argument for set_speaker_status"

# Test 4: Extra argument for get_speaker_status
bash $FILE_PATH audio get_speaker_status extra >/dev/null 2>&1
test_fail_result $? "Test 4: Extra argument for get_speaker_status"

# Test 5: Invalid speaker status
bash $FILE_PATH audio set_speaker_status foo >/dev/null 2>&1
test_fail_result $? "Test 5: Invalid speaker status"

# Test 6: Get speaker status
result=$(bash $FILE_PATH audio get_speaker_status)
test_pass_result $(
        [[ "$result" == "external" ]] ||
                [[ "$result" == "embedded" ]]
        echo $?
) "Test 6: Get speaker status"

# Test 7: Set speaker status to external
bash $FILE_PATH audio set_speaker_status external >/dev/null 2>&1
if [[ $? -ne 0 ]]; then
        echo -e "[\e[33mSKIP\e[0m] Test 7: Set speaker status to external (DIP SW forced)"
else
        result=$(bash $FILE_PATH audio get_speaker_status)
        test_pass_result $(
                [[ "$result" == "external" ]]
                echo $?
        ) "Test 7: Set speaker status to external"
fi

# Test 8: Set speaker status to embedded
bash $FILE_PATH audio set_speaker_status embedded >/dev/null 2>&1
if [[ $? -ne 0 ]]; then
        echo -e "[\e[33mSKIP\e[0m] Test 8: Set speaker status to embedded (DIP SW forced)"
else
        result=$(bash $FILE_PATH audio get_speaker_status)
        test_pass_result $(
                [[ "$result" == "embedded" ]]
                echo $?
        ) "Test 8: Set speaker status to embedded"
fi
