SHELL := /usr/bin/env bash
.SHELLFLAGS := -ec

OS := $(shell uname)


.PHONY: all install_gstreamer_linux install_gstreamer_windows build-python-isolation-container

##@ Общие

.PHONY: help
help: ## Список всех доступных команд
	@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n  make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf "  \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)


##@ Установка

NVM := . ~/.nvm/nvm.sh
FRONTEND_ENTRY = $(NVM) && nvm use && node -v

all: install_gstreamer_linux install_gstreamer_windows build-python-isolation-container

install_gstreamer_linux:
ifeq ($(OS), Linux)
	@echo "Установка GStreamer на Linux"
	sudo apt update
	sudo apt install -y build-essential
	sudo apt-get update
	sudo apt-get install -y pkg-config
	sudo apt-get update
	sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-good
else
	@echo "Не Linux система. Пропускаем установку для Linux."
endif

install_gstreamer_windows:
ifeq ($(OS), Windows_NT)
	@echo "Установка GStreamer на Windows"
	@echo "Пожалуйста, загрузите и распакуйте архив msys2 в корень диска C."
	@echo "Скачайте msys2: https://repo.msys2.org/distrib/x86_64/"
	@echo "Запустите C:\\msys64\\msys2.exe и выполните команды:"
	@echo "  pacman -Syuu"
	@echo "  pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gstreamer mingw-w64-x86_64-gst-libav mingw-w64-x86_64-gst-plugins-good mingw-w64-x86_64-gst-plugins-bad mingw-w64-x86_64-gst-plugins-ugly"
	@echo "Скачайте и распакуйте следующие архивы в C:\\pkg-config\\bin:"
	@echo "  https://download.gnome.org/binaries/win32/dependencies/pkg-config_0.26-1_win32.zip"
	@echo "  https://download.gnome.org/binaries/win32/glib/2.28/glib_2.28.1-1_win32.zip"
	@echo "  https://download.gnome.org/binaries/win32/dependencies/gettext-runtime_0.18.1.1-2_win32.zip"
	@echo "Добавьте следующие пути к системной переменной среды PATH (в начало):"
	@echo "  C:\\msys64\\mingw64\\bin"
	@echo "  C:\\msys64\\mingw64\\lib"
	@echo "  C:\\pkg-config\\bin"
	@echo "Добавьте следующий путь к системной переменной среды PKG_CONFIG_PATH:"
	@echo "  C:\\msys64\\mingw64\\lib\\pkgconfig"
else
	@echo "Не Windows система. Пропускаем установку для Windows."
endif

##@ Бекенд

.PHONY: check-go
check-go: ## Проверка версии Go
	@go version | grep -q 'go1\.18' || (echo "Please use Go 1.18.X"; exit 1)

.PHONY: build
build: check-go ## Сборка бекенда
	go build .

build-python-isolation-container: ## Компиляция образа контейнера для изоляции программ на Python.
	@echo "Компиляция образа изоляции программ на Python"
	docker build -f docker/Dockerfile -t librisdk_python .


##@ Фронтенд

.PHONY: frontend-install
frontend-install: ## Установка зависимостей фронтенда
	${FRONTEND_ENTRY} && yarn install

.PHONY: frontend
frontend: ## Сборка фронта
	${FRONTEND_ENTRY} && yarn run build

.PHONY: watch
watch: ## Запускает сборку фронта в режиме watch
	${FRONTEND_ENTRY} && yarn run watch
