#!/usr/bin/env bash
set -eo pipefail

mode="$1"

outdir="bin/publish"
args_selfcontained="
  --self-contained
  --use-current-runtime
  -p:PublishSingleFile=true
  -p:PublishTrimmed=true
  -p:TrimMode=partial
  -p:EnableCompressionInSingleFile=true
  -p:OptimizationPreference=Size
  -p:InvariantGlobalization=true
  -p:DebugType=none
  -p:IncludeNativeLibrariesForSelfExtract=true"

args_aot="
  -p:PublishAot=true
  -p:OptimizationPreference=Size
  -p:DebugType=none"
  
case "$mode" in
	aot | native | бинарное)
		args="$args_aot"
		;;
	self-contained | selfcontained | небинарное)
		args="$args_selfcontained"
		;;
	*)
		echo "ПОЛЬЗОВАНИЕ: ./build.sh [способ]"
		echo "  СПОСОБЫ:"
		echo "    aot, native, бинарное   - компилирует промежуточный (управляемый) код в машинный вместе с рантаймом"
		echo "    self-contained, selfcontained, небинарное - приделывает промежуточный (управляемый) код к рантайму"
		echo "  Оба способа собирают программу в один файл, который не является 80-мегабайтовым умственно отсталым кубом.\
 Он 20-мегабайтовый >w<"
		exit 1
		;;
esac

rm -rf "$outdir"
command="dotnet publish -c Release -o $outdir $args"
echo "$command"
$command

find "$outdir" -name '*.pdb' -delete -printf "deleted '%p'\n"
tree -sh "$outdir"
