#!/bin/bash

set -e

# defaults if not set
: "${SKIP_LINT:=0}"
: "${COV_REPORT:=term}"
: "${COV_PORT:=8000}"

# convert to all lowercase
COV_REPORT=$(echo $COV_REPORT | tr '[:upper:]' '[:lower:]')

# lint
if [ "$SKIP_LINT" -ne 1 ]; then
    echo 'Running mypy...'
    poetry run mypy --cache-dir=/dev/null src tests
    echo 'Running ruff linter...'
    poetry run ruff check --no-cache
    echo 'Running ruff formatter check...'
    poetry run ruff format --diff --no-cache
else
    echo 'Skipping linting...'
fi

# set flags for pytest-cov
COVERAGE_ARGS=""
if [ "$COV_REPORT" != "off" ]; then
    COVERAGE_ARGS="--cov-report $COV_REPORT --cov=src"
fi

# run pytest with args set
echo 'Running tests...'
poetry run pytest $TEST_ARGS --ignore=tests/integration/ tests/ $COVERAGE_ARGS

# serve out html coverage report
if [ "$COV_REPORT" = "html" ]; then
    echo "Serving out coverage report on port $COV_PORT..."
    python -m http.server --directory htmlcov $COV_PORT
fi

echo 'Done!'
