SHELL := /bin/sh

BUF ?= buf

.PHONY: buf-lint buf-generate py-sync py-test go-test test compose-up compose-up-dev s3-init run-server

buf-lint:
	$(BUF) lint

buf-generate:
	$(BUF) generate

py-sync:
	uv sync --project python --all-packages

py-test:
	@set -e; \
	if [ -n "$${TEST:-}" ]; then \
		uv run --project python --package officeconvert python -m unittest "$$TEST"; \
	else \
		uv run --project python --package officeconvert python -m unittest discover -s python/packages/officeconvert/tests; \
	fi

go-test:
	go test ./...

test: go-test py-test

compose-up:
	docker compose --env-file .env.example -f deploy/docker-compose.yml up --build

compose-up-dev:
	docker compose --env-file .env.example -f deploy/docker-compose.dev.yml up

s3-init:
	@set -a; \
	if [ -f .env ]; then . ./.env; fi; \
	set +a; \
	endpoint="$${S3_ENDPOINT:-localhost:8333}"; \
	case "$$endpoint" in seaweedfs:8333) endpoint=localhost:8333 ;; esac; \
	bucket="$${S3_BUCKET:-officeconvert}"; \
	access_key="$${S3_ACCESS_KEY:-minioadmin}"; \
	secret_key="$${S3_SECRET_KEY:-minioadmin}"; \
	port="$${endpoint#*:}"; \
	docker run --rm --add-host=host.docker.internal:host-gateway minio/mc:latest /bin/sh -c " \
	  mc alias set local http://host.docker.internal:$$port '$$access_key' '$$secret_key' && \
	  mc mb local/$$bucket --ignore-existing"

run-server: s3-init
	@set -a; \
	if [ -f .env ]; then . ./.env; fi; \
	set +a; \
	export PYTHONPATH="$${PYTHONPATH:-gen/python:python/packages/officeconvert/src:python/packages/server/src}"; \
	if [ "$${S3_ENDPOINT:-}" = "seaweedfs:8333" ]; then S3_ENDPOINT=localhost:8333; fi; \
	if [ "$${S3_PUBLIC_ENDPOINT:-}" = "seaweedfs:8333" ]; then S3_PUBLIC_ENDPOINT=localhost:8333; fi; \
	export S3_ENDPOINT="$${S3_ENDPOINT:-localhost:8333}"; \
	export S3_PUBLIC_ENDPOINT="$${S3_PUBLIC_ENDPOINT:-localhost:8333}"; \
	export S3_BUCKET="$${S3_BUCKET:-officeconvert}"; \
	export S3_USE_SSL="$${S3_USE_SSL:-false}"; \
	export S3_ACCESS_KEY="$${S3_ACCESS_KEY:-minioadmin}"; \
	export S3_SECRET_KEY="$${S3_SECRET_KEY:-minioadmin}"; \
	export S3_SESSION_TTL_SECONDS="$${S3_SESSION_TTL_SECONDS:-3600}"; \
	export CONVERSION_PPTX_TO_PDF_TIMEOUT_SECONDS="$${CONVERSION_PPTX_TO_PDF_TIMEOUT_SECONDS:-180}"; \
	export CONVERSION_PDF_TO_IMAGES_TIMEOUT_SECONDS="$${CONVERSION_PDF_TO_IMAGES_TIMEOUT_SECONDS:-1800}"; \
	export CONVERSION_PPTX_TO_PDF_BASE_TIMEOUT_SECONDS="$${CONVERSION_PPTX_TO_PDF_BASE_TIMEOUT_SECONDS:-45}"; \
	export CONVERSION_PPTX_TO_PDF_PER_SLIDE_TIMEOUT_SECONDS="$${CONVERSION_PPTX_TO_PDF_PER_SLIDE_TIMEOUT_SECONDS:-3}"; \
	export CONVERSION_PDF_TO_IMAGES_BASE_TIMEOUT_SECONDS="$${CONVERSION_PDF_TO_IMAGES_BASE_TIMEOUT_SECONDS:-30}"; \
	export CONVERSION_PDF_TO_IMAGES_PER_SLIDE_TIMEOUT_SECONDS="$${CONVERSION_PDF_TO_IMAGES_PER_SLIDE_TIMEOUT_SECONDS:-8}"; \
	export CONVERSION_CLEANUP_DELAY_SECONDS="$${CONVERSION_CLEANUP_DELAY_SECONDS:-3600}"; \
	uv run --project python --package officeconvert-server python -m uvicorn officeconvert_server.app:app --host "$${UVICORN_HOST:-0.0.0.0}" --port "$${UVICORN_PORT:-8080}"
