.PHONY: build deps up down setup deploy redeploy logs clean

# Install dependencies (composer via Docker since PHP may not be local)
deps:
	npm install --no-audit --no-fund
	docker run --rm -v "$$(pwd):/app" -w /app composer:2 install --no-dev --optimize-autoloader --no-interaction

# Build frontend
build: deps
	npx webpack --node-env production --progress

# Start containers (detached)
up:
	docker compose up -d

# Wait for NC to be ready, install it, copy app in, enable it
setup:
	@echo "Waiting for Nextcloud container to be ready..."
	@until docker compose exec -T nextcloud test -f config/CAN_INSTALL 2>/dev/null || \
	       docker compose exec -T nextcloud test -f config/config.php 2>/dev/null; do \
		sleep 3; \
		echo "  still waiting..."; \
	done
	@sleep 5
	@echo "Fixing custom_apps ownership..."
	docker compose exec nextcloud chown www-data:www-data /var/www/html/custom_apps
	@echo "Installing Nextcloud..."
	docker compose exec -u www-data nextcloud php occ maintenance:install \
		--database=mysql \
		--database-host=db \
		--database-name=$${MYSQL_DATABASE:-nextcloud} \
		--database-user=$${MYSQL_USER:-nextcloud} \
		--database-pass=$$(grep MYSQL_PASSWORD .env | head -1 | cut -d= -f2) \
		--admin-user=$$(grep NEXTCLOUD_ADMIN_USER .env | cut -d= -f2) \
		--admin-pass=$$(grep NEXTCLOUD_ADMIN_PASSWORD .env | cut -d= -f2) \
		2>&1 || true
	@echo "Copying app into Nextcloud..."
	docker compose exec nextcloud mkdir -p /var/www/html/custom_apps/mitgliederverwaltung
	docker compose exec nextcloud cp -a /app-src/appinfo /var/www/html/custom_apps/mitgliederverwaltung/
	docker compose exec nextcloud cp -a /app-src/lib /var/www/html/custom_apps/mitgliederverwaltung/
	docker compose exec nextcloud cp -a /app-src/templates /var/www/html/custom_apps/mitgliederverwaltung/
	docker compose exec nextcloud cp -a /app-src/js /var/www/html/custom_apps/mitgliederverwaltung/
	docker compose exec nextcloud cp -a /app-src/vendor /var/www/html/custom_apps/mitgliederverwaltung/
	docker compose exec nextcloud chown -R www-data:www-data /var/www/html/custom_apps/mitgliederverwaltung
	@echo "Enabling app..."
	docker compose exec -u www-data nextcloud php occ app:enable mitgliederverwaltung
	@echo ""
	@echo "Done! Nextcloud is running at http://localhost:8080"
	@echo "Login with credentials from .env (NEXTCLOUD_ADMIN_USER / NEXTCLOUD_ADMIN_PASSWORD)"

# Full deploy: build, start, install, enable
deploy: build up setup

# Rebuild and redeploy app into running NC
redeploy: build
	docker compose exec nextcloud rm -rf /var/www/html/custom_apps/mitgliederverwaltung
	docker compose exec nextcloud mkdir -p /var/www/html/custom_apps/mitgliederverwaltung
	docker compose exec nextcloud cp -a /app-src/appinfo /var/www/html/custom_apps/mitgliederverwaltung/
	docker compose exec nextcloud cp -a /app-src/lib /var/www/html/custom_apps/mitgliederverwaltung/
	docker compose exec nextcloud cp -a /app-src/templates /var/www/html/custom_apps/mitgliederverwaltung/
	docker compose exec nextcloud cp -a /app-src/js /var/www/html/custom_apps/mitgliederverwaltung/
	docker compose exec nextcloud cp -a /app-src/vendor /var/www/html/custom_apps/mitgliederverwaltung/
	docker compose exec nextcloud chown -R www-data:www-data /var/www/html/custom_apps/mitgliederverwaltung
	docker compose exec -u www-data nextcloud php occ upgrade 2>/dev/null || true
	@echo "App redeployed."

down:
	docker compose down

logs:
	docker compose logs -f nextcloud

# Remove volumes (full reset)
clean:
	docker compose down -v
