SHELL := bash

DB_HOST ?= 127.0.0.1
DB_PORT	?= 1433

DB_USERNAME ?= upperio_tests
DB_PASSWORD ?= upperio_Secre3t
DB_NAME     ?= upperio_tests

DB_SA_USERNAME ?= sa
DB_SA_PASSWORD ?= my$$Password

export DB_HOST
export DB_NAME
export DB_PASSWORD
export DB_PORT
export DB_USERNAME

export DB_SA_USERNAME
export DB_SA_PASSWORD

build:
	go build && go install

require-client:
	@if [ -z "$$(which tsql)" ]; then \
		echo 'Missing "tsql" command.' && \
		exit 1; \
	fi

generate:
	go generate && \
	go get -d -t -v ./...

reset-db: require-client
	SQL="" && \
	SQL+="USE [master]\nGO\n" && \
	SQL+="IF EXISTS (SELECT name FROM sys.databases WHERE name = '$(DB_NAME)') BEGIN DROP DATABASE [$(DB_NAME)] END\nGO\n" && \
	SQL+="CREATE DATABASE [$(DB_NAME)]\nGO\n" && \
	SQL+="DROP ROLE IF EXISTS [$(DB_USERNAME)]\nGO\n" && \
	SQL+="CREATE ROLE [$(DB_USERNAME)]\nGO\n" && \
	SQL+="USE [$(DB_NAME)]\nGO\n" && \
	SQL+="IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = '$(DB_USERNAME)') BEGIN CREATE LOGIN $(DB_USERNAME) WITH PASSWORD = '$(DB_PASSWORD)' END\nGO\n" && \
	SQL+="IF NOT EXISTS (SELECT name FROM sys.database_principals WHERE name = '$(DB_USERNAME)') BEGIN CREATE USER $(DB_USERNAME) END\nGO\n" && \
	SQL+="EXEC sp_addrolemember 'db_owner', N'$(DB_USERNAME)'\nGO\n" && \
	SQL+="EXEC sp_change_users_login 'Update_One', '$(DB_USERNAME)', '$(DB_USERNAME)'\nGO\n" && \
	echo -ne $$SQL | tsql -H $(DB_HOST) -p $(DB_PORT) -U $(DB_SA_USERNAME) -P '$(DB_SA_PASSWORD)'

test: reset-db generate
	go test -tags generated -v