#!/bin/bash
SCRIPT_DIR="$(
    cd "$(dirname "${BASH_SOURCE[0]}")"
    pwd
)" # Figure out where the script is running

case $(uname -sm) in
'Linux x86_64')
    os='linux-x86_64'
    ;;
'Darwin x86' | 'Darwin x86_64' | 'Darwin arm64')
    os='osx'
    ;;
'Windows')
    os='win32'
    ;;
esac

denor="deno run -A --unstable"
denot="deno test -A --unstable"
case "$1" in
#CMD - get_pact_ffi
get_pact_ffi)
    $denor src/downloadFfi.ts --run
    ;;
#CMD - get_broker
get_broker)
    $denor docker/pactBroker.ts
    ;;
#CMD - get_pact_plugin_cli
get_pact_plugin_cli)
    curl -fsSL https://raw.githubusercontent.com/pact-foundation/pact-plugins/main/scripts/install-plugin-cli.sh | bash
    ;;
#CMD - get_protobuf_plugin
get_protobuf_plugin)
    ${PATH_TO_CLI}pact-plugin-cli -y install https://github.com/pactflow/pact-protobuf-plugin/releases/latest
    ;;
#CMD - test_grpc_area_client
test_grpc_area_client)
    $denot src/usage/areaCalculatorClientTest.ts
    ;;
#CMD - test_grpc_area_provider
test_grpc_area_provider)
    $denor src/usage/areaCalculator/areaCalculatorServer.ts --run --port 3000 & _pid=$!;
    sleep 3 && $denot src/usage/areaCalculatorProviderTest.ts  ;kill $_pid
    ;;
#CMD - test_grpc_greeter_client
test_grpc_greeter_client)
    $denot src/usage/greeterClientTest.ts
    ;;
#CMD - start_area_calculator_provider
start_area_calculator_provider)
    $denor src/usage/areaCalculator/areaCalculatorServer.ts
    ;;
#CMD - run_area_calculator
run_area_calculator)
    $denor src/usage/areaCalculator/areaCalculatorServer.ts & _pid=$!;
    sleep 3 && $denor src/usage/areaCalculator/areaCalculatorClient.ts --run ;kill $_pid
    ;;
#CMD - run_grpc_greeter
run_grpc_greeter)
    $denor src/usage/greeter/greeterServer.ts & _pid=$!;
    sleep 3 && $denor src/usage/greeter/greeterClient.ts --run ;kill $_pid
    ;;
#CMD - run_product_api_provider
run_product_api_provider)
    $denor src/usage/productApi/provider/server.ts
    ;;
#CMD - test_product_api_provider
test_product_api_provider)
    $denot src/usage/productApi/provider/product/product.test.ts
    ;;
#CMD - run_smv_service
run_smv_service)
    $denor src/usage/swaggerMockValidator/swaggerMockValidatorServer.ts --run --port 3000
    ;;
#CMD - test_smv_service_provider_integration
test_smv_service_provider_integration)
    $denot src/usage/swaggerMockValidator/swaggerMockValidatorService.test.ts
    ;;
#CMD - test_smv_service_consumer_pact
test_smv_service_consumer_pact)
    $denot src/usage/swaggerMockValidator/swaggerMockValidatorServer.consumer.pact.ts
    ;;
#CMD - test_smv_service_provider_pact
test_smv_service_provider_pact)
    $denor src/usage/swaggerMockValidator/swaggerMockValidatorServer.ts --run --port 3000 & _pid=$!;
    sleep 3 && $denot src/usage/swaggerMockValidator/swaggerMockValidatorServer.provider.pact.ts  ;kill $_pid
    ;;
#CMD - test_verifier_pact
test_verifier_pact)
    $denor src/usage/swaggerMockValidator/swaggerMockValidatorServer.ts --run --port 3000 & _pid1=$!;
    $denor src/usage/areaCalculator/areaCalculatorServer.ts --run & _pid2=$!;
    sleep 3 && $denot src/usage/verifier.test.ts  ;kill $_pid1 ;kill $_pid2
    ;;
#CMD - act
act)
    act --container-architecture linux/amd64
    ;;
#CMD - all
all)
    ./run run_area_calculator
    ./run test_grpc_area_client
    ./run test_grpc_area_provider
    ./run run_grpc_greeter
    ./run test_grpc_greeter_client
    ./run test_product_api_provider
    ./run test_smv_service_provider_integration
    ./run test_smv_service_consumer_pact
    ./run test_smv_service_provider_pact
    ;;
* | help)
    echo "available commands"
    echo "______"
    cat ./run | grep '#CMD' | awk  '{print $3}'
    ;;
esac
