# Основная цель - выполняет полный цикл обновления и перезапуска всех сервисов
all: stop_all git build_all start_all wat

# Перезапуск всех сервисов и мониторинг состояния
restart_all:
	docker compose restart && wat

# Полная остановка всех сервисов
stop_all:
	docker compose down

# Полная пересборка всех сервисов без кэша
build_all:
	docker compose build --no-cache

# Запуск всех сервисов в фоновом режиме
start_all:
	docker compose up -d

# Целевая команда для обновления сервиса api_bb
api_bb: stop_bb git build_bb run_bb wn

# Обновление кода из git репозитория
git:
	git pull

# Остановка только сервиса api_bb
stop_bb:
	docker compose down api_bb

# Пересборка только сервиса api_bb
build_bb:
	docker compose build api_bb --no-cache

# Запуск только сервиса api_bb в фоновом режиме
run_bb:
	docker compose up api_bb -d

# Подключение к базе данных Бегущий Башкир через psql
bb_db:
	docker exec -it serv_nginx-db-1 sh -c "psql -U postgres -d bb_db

# Просмотр логов api_bb в реальном времени
api_bb_logs:
	docker logs api_bb -f

# Перезапуск всех сервисов (альтернативная команда)
restart:
	docker compose down && docker compose up -d

# Очистка кэша npm
npm_clean:
	npm cache clean --force

# Сборка фронтенда Бегущий Башкир
bbvue: git
	cd BB/bbvue && npm run build

# Полный цикл обновления фронтенда Бегущий Башкир
vue_bb: git npm_clean bbvue wn

# Остановка nginx
stop_nginx:
	docker compose down nginx

# Пересборка nginx
build_nginx:
	docker compose build nginx --no-cache

# Запуск nginx
start_nginx:
	docker compose up nginx -d

# Просмотр логов nginx в реальном времени
logs_nginx:
	docker logs nginx -f

# Полный цикл обновления nginx
nginx: stop_nginx git build_nginx start_nginx logs_nginx

# Остановка всех сервисов (альтернативная команда)
stop:
	docker compose down

# Пересборка всех сервисов (альтернативная команда)
build:
	docker compose build --no-cache

# Запуск всех сервисов (альтернативная команда)
start:
	docker compose up -d --remove-orphans

# Полный перезапуск (альтернативная команда)
re_all: stop git build start

# Остановка Keycloak
stop_kk:
	docker compose down keycloak

# Пересборка Keycloak
build_kk:
	docker compose build keycloak --no-cache

# Запуск Keycloak
start_kk:
	docker compose up keycloak  -d

# Просмотр логов Keycloak в реальном времени
logs_kk:
	docker logs keycloak -f

# Быстрый перезапуск Keycloak
re_kk: git stop_kk start_kk

# Полный цикл обновления Keycloak
keycloak: git stop_kk build_kk start_kk logs_kk

# Сборка easysite с логированием в файл
build_es_log:
	docker-compose build --no-cache easysite 2>&1 | tee build.log

# Детальная сборка easysite с прогрессом
build_es_log_all:
	docker-compose build --no-cache --progress=plain easysite

# Просмотр логов easysite в реальном времени
easysite_logs:
	docker logs easysite -f

# Остановка easysite
easysite_stop:
	docker compose down easysite

# Пересборка easysite
easysite_build:
	docker compose build easysite --no-cache

# Запуск easysite с проверкой состояния
easysite_start:
	docker compose up easysite -d && docker ps

# all
easysite: easysite_stop git easysite_build easysite_start easysite_logs

# Мониторинг системных ресурсов
top:
	htop

# Полный цикл обновления easysite
es: easysite_stop git easysite_build easysite_start wn

# Остановка analytics
stop_analitics:
	docker compose down analytics

# Пересборка analytics
build_analititcs:
	docker compose build analytics --no-cache

# Запуск analytics с проверкой состояния
start_analytics:
	docker compose up analytics -d && docker ps

# Быстрый перезапуск analytics
restart_analytics:
	docker compose restart analytics

# Полный цикл обновления analytics
analytics: stop_analitics git build_analititcs start_analytics wn

# Остановка certbot
stop_cerbot:
	docker compose down certbot

# Пересборка certbot
build_certbot:
	docker compose build certbot --no-cache

# Запуск certbot
start_certbot:
	docker compose up certbot -d

# Полный цикл обновления certbot
certbot: stop_cerbot git build_certbot start_certbot wat

# Сборка фронтенда valitovgaziz
valitovgaziz_build_spa: git
	cd valitovgaziz && npm run build

# Остановка valitovgaziz
stop_valitovgaziz:
	docker compose down valitovgaziz

# Пересборка valitovgaziz
build_valitovgaziz:
	docker compose build valitovgaziz --no-cache

# Запуск valitovgaziz
start_valitovgaziz:
	docker compose up valitovgaziz -d

# Полный цикл обновления valitovgaziz
valitovgaziz: stop_valitovgaziz git build_valitovgaziz start_valitovgaziz wn

# Сборка SPA + полный цикл обновления valitovgaziz
vue_site: valitovgaziz_build_spa stop_valitovgaziz build_valitovgaziz start_valitovgaziz wn

# Мониторинг состояния контейнеров каждые 2 секунды
wn:
	watch -n 2 'docker ps'

# Остановка api_yal
stop_api_yal:
	docker compose down api_yal

# Пересборка api_yal
build_api_yal:
	docker compose build api_yal --no-cache

# Запуск api_yal
start_api_yal:
	docker compose up api_yal -d

# Полный цикл обновления api_yal
api_yal: stop_api_yal git build_api_yal start_api_yal wn

# Остановка yalarba-nuxt
stop_yalarba:
	docker compose down yalarba

# Пересборка yalarba-nuxt
build_yalarba:
	docker compose build yalarba --no-cache

# Запуск yalarba-nuxt
start_yalarba:
	docker compose up yalarba -d

# Полный цикл обновления yalarba-nuxt
yalarba: stop_yalarba git build_yalarba start_yalarba wn

# ═══════════════════════════════════════════════
# НОВЫЕ ЦЕЛИ: generate-configs, deploy, backup
# ═══════════════════════════════════════════════

# Генерация конфигов из sites.yml
generate-configs:
	bash generate-configs.sh

# Генерация + рестарт nginx
reconfig: generate-configs
	docker compose restart nginx
	$(MAKE) wn

# Авто-детект изменённых сервисов и деплой только их
deploy: git
	@echo "=== Detecting changes ==="
	@CHANGED=$$(git diff --name-only HEAD~1 HEAD | grep -oP 'main_dc/\K[^/]+' | sort -u); \
	for svc in $$CHANGED; do \
		case "$$svc" in \
			BB)        name="api_bb" ;; \
			certbot)   name="certbot" ;; \
			backup)    name="backup" ;; \
			gitea)     name="gitea" ;; \
			*)         name="$$svc" ;; \
		esac; \
		if grep -q "^  $$name:" docker-compose.yml 2>/dev/null; then \
			echo "  → Rebuilding $$name..."; \
			$(MAKE) stop_$$name build_$$name start_$$name 2>/dev/null || \
			$(MAKE) stop_$$svc build_$$svc start_$$svc 2>/dev/null || true; \
		fi; \
	done; \
	if echo "$$CHANGED" | grep -q 'sites.yml\|nginx'; then \
		echo "  → Regenerating configs..."; \
		bash generate-configs.sh; \
		docker compose restart nginx; \
	fi

# Ручной запуск бэкапа
backup:
	docker compose exec backup /opt/backup.sh

# Ручной запуск бэкапа (разовый контейнер)
backup-run:
	docker compose run --rm backup /opt/backup.sh

# Восстановление из бэкапа: make restore [DATE=2026-06-11]
restore:
	docker compose run --rm backup /opt/restore.sh $(DATE)

# Gitea — полный цикл обновления
gitea: stop_gitea git build_gitea start_gitea wn

stop_gitea:
	docker compose down gitea

build_gitea:
	docker compose build gitea --no-cache

start_gitea:
	docker compose up gitea -d

# Gitea Runner — полный цикл
gitea-runner: stop_gitea-runner git build_gitea-runner start_gitea-runner wn

stop_gitea-runner:
	docker compose down gitea-runner

build_gitea-runner:
	docker compose build gitea-runner --no-cache

start_gitea-runner:
	docker compose up gitea-runner -d

# Gitea first-time setup helper
gitea-setup:
	@echo "=== Gitea Setup ==="
	@echo "1. Open http://94.41.23.97:3001 in browser"
	@echo "2. Complete initial setup (DB: SQLite3 is fine)"
	@echo "3. Create admin user"
	@echo "4. Create new repository 'tp' and push:"
	@echo "   git remote add gitea http://94.41.23.97:3001/USER/tp.git"
	@echo "   git push -u gitea main"
	@echo "5. Register runner:"
	@echo "   Settings → Actions → Runners → Create Token"
	@echo "   Update GITEA_RUNNER_REGISTRATION_TOKEN in docker-compose.yml"
	@echo "   Then: docker compose up -d gitea-runner"
	@echo "6. Add secrets in repo Settings → Actions → Secrets:"
	@echo "   (none needed — runner runs locally)"

# Показать все доступные цели
help:
	@echo "=== Make targets ==="
	@echo ""
	@echo "Site management:"
	@echo "  generate-configs     — generate nginx configs from sites.yml"
	@echo "  reconfig             — generate configs + restart nginx"
	@echo ""
	@echo "Deploy:"
	@echo "  all                  — full cycle all services"
	@echo "  deploy               — auto-detect changes, rebuild only changed"
	@echo "  <service>            — full cycle for one service"
	@echo ""
	@echo "Backup:"
	@echo "  backup               — run backup via running container"
	@echo "  backup-run           — run backup in one-shot container"
	@echo "  restore DATE=...     — restore from backup"
	@echo ""
	@echo "Gitea:"
	@echo "  gitea                — full cycle Gitea"
	@echo "  gitea-runner         — full cycle Runner"
	@echo "  gitea-setup          — first-time setup instructions"
	@echo ""
	@echo "Monitoring:"
	@echo "  wn                   — watch docker ps"
	@echo "  logs_<service>       — logs for a service"
	@echo "  bb_db                — psql into bb_db"