# Makefile for deltalake Docker image build and push
# Default TAG is today's date in YYYYMMDD format
TAG ?= $(shell date +%Y%m%d)

# Image registries
SOURCE_REGISTRY := 557537366020.dkr.ecr.us-west-2.amazonaws.com/deltalake-ops-server
AWS_DEV_REGISTRY := 552185537300.dkr.ecr.us-west-2.amazonaws.com/deltalake-ops-server
AWS_PROD_REGISTRY := 557537366020.dkr.ecr.us-west-2.amazonaws.com/deltalake-ops-server
GCP_PROD_REGISTRY := us-west1-docker.pkg.dev/gcp-autonomous-prod/observability-regional-server/deltalake-ops-server
AZURE_PROD_REGISTRY := o11yprod.azurecr.io/deltalake-ops-server
ALICLOUD_PROD_REGISTRY := o11-prod-repo-registry.ap-southeast-1.cr.aliyuncs.com/prod/deltalake-ops-server

# Image names with tags
SOURCE_IMAGE := $(SOURCE_REGISTRY):$(TAG)
AWS_DEV_IMAGE := $(AWS_DEV_REGISTRY):$(TAG)
AWS_PROD_IMAGE := $(AWS_PROD_REGISTRY):$(TAG)
GCP_PROD_IMAGE := $(GCP_PROD_REGISTRY):$(TAG)
AZURE_PROD_IMAGE := $(AZURE_PROD_REGISTRY):$(TAG)
ALICLOUD_PROD_IMAGE := $(ALICLOUD_PROD_REGISTRY):$(TAG)

# Root directory
ROOT := $(shell cd $(dir $(lastword $(MAKEFILE_LIST)))/../.. && pwd)
BUILD_DIR := $(ROOT)/build/deltalakeopsserver

.PHONY: build push-aws-dev push-aws-prod push-gcp-prod push-azure-prod push-alicloud-prod clean help

help:
	@echo "Available targets:"
	@echo "  build              - Build Docker image (default TAG=$(TAG))"
	@echo "  push-aws-dev       - Tag and push to AWS dev registry"
	@echo "  push-aws-prod      - Tag and push to AWS prod registry"
	@echo "  push-gcp-prod      - Tag and push to GCP prod registry"
	@echo "  push-azure-prod    - Tag and push to AZURE prod registry"
	@echo "  push-alicloud-prod - Tag and push to ALICLOUD prod registry"
	@echo "  clean              - Clean temporary files"
	@echo ""
	@echo "Usage:"
	@echo "  make build              # Build with default tag (today's date)"
	@echo "  make build TAG=v8       # Build with custom tag"
	@echo "  make push-aws-dev TAG=v8  # Push to AWS dev with custom tag"

build:
	@echo "Building image $(SOURCE_IMAGE)..."
	@cd $(ROOT) && \
	cp deltalakeopsserver/requirements.txt $(BUILD_DIR)/requirements.txt && \
	cp -R $(ROOT)/deltalakeopsserver/logstats $(BUILD_DIR) && \
	cd $(BUILD_DIR) && \
	docker build --platform linux/amd64 -t $(SOURCE_IMAGE) . && \
	rm $(BUILD_DIR)/requirements.txt && \
	rm -rf $(BUILD_DIR)/logstats/
	@echo "Build completed: $(SOURCE_IMAGE)"

push-aws-dev: build
	@echo "Pushing to AWS dev: $(AWS_DEV_IMAGE)..."
	@docker tag $(SOURCE_IMAGE) $(AWS_DEV_IMAGE)
	@docker push $(AWS_DEV_IMAGE)
	@echo "Pushed to AWS dev: $(AWS_DEV_IMAGE)"

push-aws-prod: build
	@echo "Pushing to AWS prod: $(AWS_PROD_IMAGE)..."
	@docker tag $(SOURCE_IMAGE) $(AWS_PROD_IMAGE)
	@docker push $(AWS_PROD_IMAGE)
	@echo "Pushed to AWS prod: $(AWS_PROD_IMAGE)"

push-gcp-prod: build
	@echo "Pushing to GCP prod: $(GCP_PROD_IMAGE)..."
	@docker tag $(SOURCE_IMAGE) $(GCP_PROD_IMAGE)
	@docker push $(GCP_PROD_IMAGE)
	@echo "Pushed to GCP prod: $(GCP_PROD_IMAGE)"

push-azure-prod: build
	@echo "Pushing to AZURE prod: $(AZURE_PROD_IMAGE)..."
	@docker tag $(SOURCE_IMAGE) $(AZURE_PROD_IMAGE)
	@docker push $(AZURE_PROD_IMAGE)
	@echo "Pushed to AZURE prod: $(AZURE_PROD_IMAGE)"

push-alicloud-prod: build
	@echo "Pushing to ALICLOUD prod: $(ALICLOUD_PROD_IMAGE)..."
	@docker tag $(SOURCE_IMAGE) $(ALICLOUD_PROD_IMAGE)
	@docker push $(ALICLOUD_PROD_IMAGE)
	@echo "Pushed to ALICLOUD prod: $(ALICLOUD_PROD_IMAGE)"

clean:
	@echo "Cleaning temporary files..."
	@rm -f $(BUILD_DIR)/requirements.txt
	@rm -rf $(BUILD_DIR)/logstats/
	@echo "Clean completed"
