#!/bin/bash

source "${BASH_SOURCE[0]%/*}/.common.sh"


run_analyze() (
	local vbin="$VTE_ROOT/vendor/bin"
	local config_='config/phpstan/phpstan'

	if ! [[ -f "$vbin/phpstan" ]]; then
		composer_dev
	fi
	
	case "$DIR" in
		portal)
			DIR='portal/v2'
			;;
	esac
	cd "$VTE_ROOT/$DIR"
	
	local a=(
		analyse
		--error-format=prettyJson
	)
	
	if ! [[ -f "$config_.neon" ]]; then
		config_='/tmp/phpstan'
		
		cat <<-EOF >"$config_.neon"
			parameters:
			    level: 0
			    paths:
			        - ${PWD@Q}
			    bootstrapFiles:
			        - $VTE_ROOT/config/phpstan/phpstan.bootstrap.php
			    fileExtensions:
			        - php
			        - inc
			EOF
	fi
	a+=( -c "$config_.neon" )
	
	case "$DIR" in
		gdpr|portal/v2)
			a+=( --memory-limit=512M )
			;;
		*)
			a+=( --memory-limit=4G )
			;;
	esac
	
	php "$vbin/phpstan" "${a[@]}" "${ARGS[@]}"
)


# if sourced from another script, run directly
if (return 0 2>/dev/null); then
	[[ -v ARGS ]] || ARGS=()
	[[ -v DIR ]] || DIR=
	run_analyze
	return
fi


help() {
	cat <<-EOF
		Usage: ${SELF##*/}  [options..]  [phpstan options..]  [dir]
		
		Analyze vte source code.
		
		Options:
		    --help        Show this help
		    --helpt       Show tool help
		    --            Stop options processing
		
		Special directories:
		    gdpr
		    portal
		EOF
}


parse_args() {
	local i=0
	while ((i < ${#ARGS[@]})); do
		local -n arg=ARGS[$i]
		case "$arg" in
			-h|--help)
				help
				exit 1
				;;
			--helpt)
				arg='--help'
				((i++)) || :
				continue
				;;
			--)
				array_shift ARGS
				break
				;;
			-*)
				# unknown flag, don't shift, proxy
				((i++)) || :
				continue
				;;
			*)
				# directory, shift but save dir, proxy all remaining args
				DIR="$arg"
				array_shift ARGS
				break
				;;
		esac
		array_shift ARGS
	done
}


main() {
	parse_args
	run_analyze
}

DIR=
ARGS=("$@")
main
