NAME = atp-grpm-addon-policies-raml
IMAGE_CONSOLE = $(NAME):latest

type=Schedule
src=schedule.raml
dst=$(shell basename $(src) .raml).$(type)

ROOT_DIR = $(shell cd ../../../ && pwd)
SECURITY_PATH = impl/policy/security
MANAGEMENT_PATH = impl/policy/management
SCHEDULE_PATH = impl/policy/schedule

ARTIFACTORY_HOST ?= artifactory.corp.acronis.com
VALIDATION_NAME := $(NAME)-validation
VALIDATION_DOCKER_IMAGE := $(ARTIFACTORY_HOST)/global-docker-prod-virtual/raml/tools:v2.4.4

ifeq ($(src),$(filter $(src),scripting.raml agent.raml))
	policy_path=$(MANAGEMENT_PATH)
else ifeq ($(src),schedule.raml)
	policy_path=$(SCHEDULE_PATH)
else
	policy_path=$(SECURITY_PATH)
endif


help:
	@echo "Usage: make {command}"
	@echo
	@echo "Commands:\n"
	@echo "  validate          Validate schemas: make src=schedule.raml"
	@echo "  validate-all      Validate all schemas"
	@echo "  schema            Make json schema from raml: make schema src=schedule.raml type=Schedule"
	@echo "  schema-all        Make all schemas"
	@echo "  clean             Clean schemas"  
	@echo  
	@echo "Usage examples:\n"
	@echo "  make validate-all" 
	@echo "  make validate src=schedule.raml"   
	@echo "  make schema-all "  
	@echo "  make schema src=schedule.raml type=Schedule" 
	@echo "  make clean"
	@echo

validate:
	docker run --platform linux/amd64 --name $(VALIDATION_NAME) \
		--rm -v $(ROOT_DIR):/home/ramls \
		-it $(VALIDATION_DOCKER_IMAGE) \
		node art.js validate \
  		--config "/home/ramls/$(SECURITY_PATH)/art_js_config.yaml" \
  		--local-config-name=art_js_config_%FILENAME%.yaml \
  		--with-libraries \
  		--guidelines "/home/ramls/$(policy_path)/$(src)"

validate-all:
	$(MAKE) validate src=active_protection.raml
	$(MAKE) validate src=antimalware_protection.raml
	$(MAKE) validate src=backups_scanning.raml
	$(MAKE) validate src=schedule.raml
	$(MAKE) validate src=data_protection_map.raml
	$(MAKE) validate src=microsoft_security_essentials.raml
	$(MAKE) validate src=patch_management.raml
	$(MAKE) validate src=url_filtering.raml
	$(MAKE) validate src=vulnerability_assessment.raml
	$(MAKE) validate src=windows_defender.raml
	$(MAKE) validate src=scripting.raml
	$(MAKE) validate src=agent.raml 
	$(MAKE) validate src=edr.raml

--build:
	docker ps -a -q --filter=ancestor=$(IMAGE) | xargs -I {} docker rm {}
	docker build -t $(IMAGE_CONSOLE) -f Dockerfile .

schema: --build
	test -f $(ROOT_DIR)/$(policy_path)/$(src) && \
	mkdir -p schemas && \
	rm -f schemas/$(dst).json && \
	docker run --rm -i \
		-v $(ROOT_DIR):/home/ramls \
		-w /home/ramls \
		$(IMAGE_CONSOLE) \
		dt2js $(policy_path)/$(src) $(type) > schemas/$(dst).json

clean:
	rm -rf "$(ROOT_DIR)/$(SECURITY_PATH)/schemas/"* 2>/dev/null; exit 0

schema-all: clean
	$(MAKE) schema src=active_protection.raml type=ActiveProtectionPolicySettings
	$(MAKE) schema src=antimalware_protection.raml type=AntimalwareProtectionPolicySettings
	$(MAKE) schema src=backups_scanning.raml type=BackupsScanningPolicySettings
	$(MAKE) schema src=schedule.raml type=Schedule
	$(MAKE) schema src=data_protection_map.raml type=DataProtectionMapPolicySettings
	$(MAKE) schema src=microsoft_security_essentials.raml type=MicrosoftSecurityEssentialsPolicySettings
	$(MAKE) schema src=patch_management.raml type=PatchManagementPolicySettings
	$(MAKE) schema src=url_filtering.raml type=URLFilteringPolicySettings
	$(MAKE) schema src=vulnerability_assessment.raml type=VulnerabilityAssessmentPolicySettings
	$(MAKE) schema src=windows_defender.raml type=WindowsDefenderPolicySettings
	$(MAKE) schema src=scripting.raml type=ScriptingPolicySettings
	$(MAKE) schema src=agent.raml type=AgentPolicySettings
	$(MAKE) schema src=edr.raml type=EDRPolicySettings