##### Make runs with POSIX sh
SHELL := /bin/sh
.SHELLFLAGS := -ec

# --- config (raw) ---
CONTAINER_NAME_RAW ?= voka-player
IMAGE_NAME_RAW     ?= voka-player
WORKDIR_RAW        ?= /usr/voka

# --- sanitized ---
CONTAINER_NAME := $(strip $(CONTAINER_NAME_RAW))
IMAGE_NAME     := $(strip $(IMAGE_NAME_RAW))
WORKDIR        := $(strip $(WORKDIR_RAW))

# helper: exec if running, otherwise one-off run; force legacy eslint mode
define run_in_container
	@if docker ps --format '{{.Names}}' | grep -q '^$(CONTAINER_NAME)$$'; then \
		echo "→ Using running container: '$(CONTAINER_NAME)'"; \
		echo "+ docker exec -w '$(WORKDIR)' '$(CONTAINER_NAME)' /bin/sh -lc 'export ESLINT_USE_FLAT_CONFIG=0; $(1)'"; \
		docker exec -w "$(WORKDIR)" "$(CONTAINER_NAME)" /bin/sh -lc 'export ESLINT_USE_FLAT_CONFIG=0; $(1)'; \
	else \
		echo "→ Running one-off container from image: '$(IMAGE_NAME)'"; \
		echo "+ docker run --rm -v '$$(pwd):$(WORKDIR)' -w '$(WORKDIR)' --entrypoint /bin/sh '$(IMAGE_NAME)' -lc 'export ESLINT_USE_FLAT_CONFIG=0; $(1)'"; \
		docker run --rm \
			-v "$$(pwd):$(WORKDIR)" \
			-w "$(WORKDIR)" \
			--entrypoint /bin/sh \
			"$(IMAGE_NAME)" \
			-lc 'export ESLINT_USE_FLAT_CONFIG=0; $(1)'; \
	fi
endef

.PHONY: lint lint-fix format lint-staged ci-check vars-debug

lint:
	$(call run_in_container,npx eslint --ext .ts,.tsx src)

lint-fix:
	$(call run_in_container,npx eslint --ext .ts,.tsx src --fix)

format:
	$(call run_in_container,npx prettier --write .)

lint-staged:
	$(call run_in_container,npx lint-staged --debug)

ci-check:
	$(call run_in_container,npx eslint --ext .ts,.tsx src)
	$(call run_in_container,npx prettier --check .)

vars-debug:
	@printf "CONTAINER_NAME='%s'\nIMAGE_NAME='%s'\nWORKDIR='%s'\n" "$(CONTAINER_NAME)" "$(IMAGE_NAME)" "$(WORKDIR)"
