#!/bin/sh
set -e

echo "=========================================="
echo "Testing basic wmbusmeters functionality..."
echo "=========================================="
echo ""

TOTAL_TESTS=0
PASSED_TESTS=0
FAILED_TESTS=0

# Test 1: Version output
TOTAL_TESTS=$((TOTAL_TESTS + 1))
echo "----------------------------------------"
echo "Test $TOTAL_TESTS: Version command"
if wmbusmeters --version > /dev/null 2>&1; then
    echo "  ✓ PASSED"
    PASSED_TESTS=$((PASSED_TESTS + 1))
else
    echo "  ✗ FAILED"
    FAILED_TESTS=$((FAILED_TESTS + 1))
fi

# Test 2: List meters
TOTAL_TESTS=$((TOTAL_TESTS + 1))
echo "----------------------------------------"
echo "Test $TOTAL_TESTS: List available meter drivers"
if wmbusmeters --listmeters 2>&1 | grep -q "iperl"; then
    echo "  ✓ PASSED"
    PASSED_TESTS=$((PASSED_TESTS + 1))
else
    echo "  ✗ FAILED"
    FAILED_TESTS=$((FAILED_TESTS + 1))
fi

# Test 3: List fields
TOTAL_TESTS=$((TOTAL_TESTS + 1))
echo "----------------------------------------"
echo "Test $TOTAL_TESTS: List fields for a meter driver"
if wmbusmeters --listfields=multical21 2>&1 | grep -q "total_m3"; then
    echo "  ✓ PASSED"
    PASSED_TESTS=$((PASSED_TESTS + 1))
else
    echo "  ✗ FAILED"
    FAILED_TESTS=$((FAILED_TESTS + 1))
fi

echo ""
echo "Testing telegram parsing with simulation files..."
echo ""

# Use local simulation files from source tree
SIM_DIR="simulations"

# Test 4: Parse C1 telegrams
TOTAL_TESTS=$((TOTAL_TESTS + 1))
echo "----------------------------------------"
echo "Test $TOTAL_TESTS: Parse C1 meter telegrams"
if [ -f "$SIM_DIR/simulation_c1.txt" ]; then
    if wmbusmeters --format=json "$SIM_DIR/simulation_c1.txt" \
        MyTapWater multical21 76348799 NOKEY \
        2>/dev/null | grep -q '"meter":"multical21"'; then
        echo "  ✓ PASSED"
        PASSED_TESTS=$((PASSED_TESTS + 1))
    else
        echo "  ✗ FAILED"
        FAILED_TESTS=$((FAILED_TESTS + 1))
    fi
else
    echo "  ⚠ SKIPPED - simulation file not found"
fi

# Test 5: Parse T1 telegrams
TOTAL_TESTS=$((TOTAL_TESTS + 1))
echo "----------------------------------------"
echo "Test $TOTAL_TESTS: Parse T1 meter telegrams"
if [ -f "$SIM_DIR/simulation_t1.txt" ]; then
    if wmbusmeters --format=json "$SIM_DIR/simulation_t1.txt" \
        MyWarmWater supercom587 12345678 NOKEY \
        2>/dev/null | grep -q '"meter":"supercom587"'; then
        echo "  ✓ PASSED"
        PASSED_TESTS=$((PASSED_TESTS + 1))
    else
        echo "  ✗ FAILED"
        FAILED_TESTS=$((FAILED_TESTS + 1))
    fi
else
    echo "  ⚠ SKIPPED - simulation file not found"
fi

# Test 6: Parse S1 telegrams  
TOTAL_TESTS=$((TOTAL_TESTS + 1))
echo "----------------------------------------"
echo "Test $TOTAL_TESTS: Parse S1 meter telegrams"
if [ -f "$SIM_DIR/simulation_s1.txt" ]; then
    if wmbusmeters --format=json "$SIM_DIR/simulation_s1.txt" \
        HCA qcaloric 91835132 NOKEY \
        2>/dev/null | grep -q '"meter":"qcaloric"'; then
        echo "  ✓ PASSED"
        PASSED_TESTS=$((PASSED_TESTS + 1))
    else
        echo "  ✗ FAILED"
        FAILED_TESTS=$((FAILED_TESTS + 1))
    fi
else
    echo "  ⚠ SKIPPED - simulation file not found"
fi

# Test 7: Parse iperl water meter
TOTAL_TESTS=$((TOTAL_TESTS + 1))
echo "----------------------------------------"
echo "Test $TOTAL_TESTS: Parse iperl water meter"
if [ -f "$SIM_DIR/simulation_iperl.txt" ]; then
    if wmbusmeters --format=json "$SIM_DIR/simulation_iperl.txt" \
        MyWater iperl 33225544 NOKEY \
        2>/dev/null | grep -q '"meter":"iperl"'; then
        echo "  ✓ PASSED"
        PASSED_TESTS=$((PASSED_TESTS + 1))
    else
        echo "  ✗ FAILED"
        FAILED_TESTS=$((FAILED_TESTS + 1))
    fi
else
    echo "  ⚠ SKIPPED - simulation file not found"
fi

# Test 8: Parse apator162 water meter (T1)
TOTAL_TESTS=$((TOTAL_TESTS + 1))
echo "----------------------------------------"
echo "Test $TOTAL_TESTS: Parse apator162 water meter"
if [ -f "$SIM_DIR/simulation_apas.txt" ]; then
    if wmbusmeters --format=json "$SIM_DIR/simulation_apas.txt" \
        Wasser apator162 20202020 NOKEY \
        2>/dev/null | grep -q '"meter":"apator162"'; then
        echo "  ✓ PASSED"
        PASSED_TESTS=$((PASSED_TESTS + 1))
    else
        echo "  ✗ FAILED"
        FAILED_TESTS=$((FAILED_TESTS + 1))
    fi
else
    echo "  ⚠ SKIPPED - simulation file not found"
fi
echo ""
echo "=========================================="
echo "Test Summary"
echo "=========================================="
echo "Total tests:  $TOTAL_TESTS"
echo "Passed:       $PASSED_TESTS"
echo "Failed:       $FAILED_TESTS"
echo ""

if [ $FAILED_TESTS -gt 0 ]; then
    echo "✗ Some tests FAILED"
    exit 1
fi

echo "----------------------------------------"
echo "Additional Installation Checks"
echo "----------------------------------------"

# Test that the binary is properly installed
echo ""
echo "Checking binary location..."
if which wmbusmeters > /dev/null 2>&1; then
    BINARY_PATH=$(which wmbusmeters)
    echo "  ✓ Binary found at: $BINARY_PATH"
else
    echo "  ✗ Binary not found in PATH"
    exit 1
fi

echo ""
echo "=========================================="
echo "✓ All tests PASSED"
echo "=========================================="
echo "OK: Basic functionality test completed"
