#!/bin/bash
# =============================================================================
# V2G EXI Decoder - 전체 플랫폼 빌드 스크립트 (Linux/macOS)
# 설명: C, VC2022 (gcc), .NET Core 모든 버전을 한 번에 빌드
# =============================================================================

echo
echo "=========================================="
echo "V2G EXI Decoder 전체 빌드 시작"
echo "=========================================="
echo

BUILD_ERROR=0
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"

# .NET Core 빌드
echo "[1/3] .NET Core 빌드 중..."
dotnet build DotNet/V2GDecoderNet.csproj -c Release
if [ $? -ne 0 ]; then
    echo "ERROR: .NET Core 빌드 실패"
    BUILD_ERROR=1
else
    echo "SUCCESS: .NET Core 빌드 완료"
fi
echo

# VC -> GCC 빌드
echo "[2/3] GCC로 VC 소스 빌드 중..."
if [ -d "VC/src" ]; then
    # GCC 컴파일 명령어
    gcc -I"VC/src" \
        -I"VC/src/codec" \
        -I"VC/src/iso1" \
        -I"VC/src/iso2" \
        -I"VC/src/din" \
        -I"VC/src/xmldsig" \
        -I"VC/src/appHandshake" \
        -I"VC/src/transport" \
        -I"VC/src/compat" \
        -O2 -Wall \
        VC/V2GDecoder.c \
        VC/src/codec/*.c \
        VC/src/iso1/*.c \
        VC/src/iso2/*.c \
        VC/src/din/*.c \
        VC/src/xmldsig/*.c \
        VC/src/appHandshake/*.c \
        VC/src/transport/*.c \
        -o V2GDecoder_gcc
    
    if [ $? -ne 0 ]; then
        echo "ERROR: GCC 빌드 실패"
        BUILD_ERROR=1
    else
        echo "SUCCESS: GCC 빌드 완료"
    fi
else
    echo "WARNING: VC 소스 폴더를 찾을 수 없습니다"
fi
echo

# C++ 빌드 확인  
echo "[3/3] C++ 빌드 확인 중..."
if [ -f "C++/build.sh" ]; then
    cd C++
    ./build.sh
    if [ $? -ne 0 ]; then
        echo "ERROR: C++ 빌드 실패"
        BUILD_ERROR=1
    else
        echo "SUCCESS: C++ 빌드 완료"
    fi
    cd "$SCRIPT_DIR"
elif [ -f "Makefile" ]; then
    make clean && make
    if [ $? -ne 0 ]; then
        echo "ERROR: C 빌드 실패"
        BUILD_ERROR=1
    else
        echo "SUCCESS: C 빌드 완료"
    fi
else
    echo "INFO: C++/Makefile이 없어 C++ 빌드를 건너뜁니다"
fi
echo

# 결과 요약
echo "=========================================="
echo "빌드 결과 요약"
echo "=========================================="
if [ $BUILD_ERROR -eq 0 ]; then
    echo "✅ 모든 빌드가 성공적으로 완료되었습니다"
    
    echo
    echo "생성된 실행 파일들:"
    [ -f "DotNet/bin/Release/net8.0/V2GDecoderNet.dll" ] && echo "  📦 .NET: DotNet/bin/Release/net8.0/V2GDecoderNet.dll"
    [ -f "V2GDecoder_gcc" ] && echo "  📦 GCC: V2GDecoder_gcc"
    [ -f "C++/bin/V2GDecoder" ] && echo "  📦 C++: C++/bin/V2GDecoder"
    
    echo
    echo "사용법:"
    echo "  dotnet run --project DotNet/V2GDecoderNet.csproj Sample/test5.exi"
    echo "  ./V2GDecoder_gcc Sample/test5.exi"
    
    exit 0
else
    echo "❌ 일부 빌드가 실패했습니다"
    exit 1
fi