# Go parameters
GOCMD = go
GOBUILD = $(GOCMD) build
GOCLEAN = $(GOCMD) clean
GOTEST = $(GOCMD) test
GOGET = $(GOCMD) get

# SQLite database filename
DB_FILE = db.sqlite3

# Directory containing migration SQL scripts
MIGRATIONS_DIR = migrations

# Build target
build:
	$(GOBUILD) -o bin/server cmd/*.go

# Run target
run: build
	./bin/server

watch: build
	watchexec -w . -r make run

# Clean target
clean:
	$(GOCLEAN)
	rm -rf bin
	rm -f db.sqlite3

# Test target
test: db.sqlite3
	$(GOTEST) ./... -count=1 -v

# Get dependencies target
deps:
	$(GOGET) -v ./...

# Update dependencies target
update:
	$(GOGET) -u -v ./...
	$(GOCMD) mod tidy

# Migration target
migrate:
	@echo "Migrating database $(DB_FILE) using SQL scripts in $(MIGRATIONS_DIR)"
	@for file in $(wildcard $(MIGRATIONS_DIR)/*.sql); do \
		echo "Applying migration: $$file"; \
		sqlite3 $(DB_FILE) < $$file; \
	done

# Target added primarily for CI/CD to ensure that the database is created before running tests
db.sqlite3:
	make migrate

# Default target
default: build