.PHONY: all build run test clean help

# 变量
BINARY_NAME=market-data-service
SYNC_BINARY=market-data-sync
DOCKER_IMAGE=market-data-service:latest

# Python项目路径
PYTHON_DIR=python_market_data_service
VENV_PATH=$(PYTHON_DIR)/venv
PYTHON_BIN=$(VENV_PATH)/bin/python
# Windows下使用不同的路径
ifeq ($(OS),Windows_NT)
    PYTHON_BIN=$(VENV_PATH)/Scripts/python
endif

# 默认目标
all: build

# ==================== Go 命令 ====================

# 构建服务
build:
	go build -o bin/$(BINARY_NAME) ./cmd/server

# 构建同步工具
build-sync:
	go build -o bin/$(SYNC_BINARY) ./cmd/sync

# 构建全部
build-all: build build-sync

# 运行服务（Go）
run:
	go run ./cmd/server

# 运行同步工具 - 同步股票列表
sync-stocks:
	go run ./cmd/sync -type stocks

# 运行同步工具 - 同步期货列表
sync-futures:
	go run ./cmd/sync -type futures

# 运行同步工具 - 同步交易日历
sync-calendar:
	go run ./cmd/sync -type calendar -start 20240101 -end 20241231

# 运行同步工具 - 同步K线数据
sync-klines:
	go run ./cmd/sync -type klines -symbol 000001.SZ -start 20240301 -end 20240307 -freq 1d

# Go测试
test:
	go test -v ./...

# 下载Go依赖
deps:
	go mod download
	go mod tidy

# ==================== Python 命令 ====================

# 创建Python虚拟环境
py-venv:
	cd $(PYTHON_DIR) && python -m venv venv
	@echo "虚拟环境已创建，请激活:"
	@echo "  Windows: $(PYTHON_DIR)\venv\Scripts\activate"
	@echo "  Linux/Mac: source $(PYTHON_DIR)/venv/bin/activate"

# 安装Python依赖
py-deps:
	$(PYTHON_BIN) -m pip install --upgrade pip
	$(PYTHON_BIN) -m pip install -r $(PYTHON_DIR)/requirements.txt
	$(PYTHON_BIN) -m pip install tushare

# 运行Python服务（开发模式）
py-run:
	cd $(PYTHON_DIR) && $(PYTHON_BIN) -m app.main

# 运行Python服务（Uvicorn，热重载）
py-run-uvicorn:
	cd $(PYTHON_DIR) && $(PYTHON_BIN) -m uvicorn app.main:app --reload --port 8080

# 运行Python服务（生产模式）
py-run-prod:
	cd $(PYTHON_DIR) && $(PYTHON_BIN) -m uvicorn app.main:app --host 0.0.0.0 --port 8080 --workers 4

# Python数据同步 - 股票
py-sync-stocks:
	cd $(PYTHON_DIR) && $(PYTHON_BIN) scripts/sync_data.py --type stocks

# Python数据同步 - 期货
py-sync-futures:
	cd $(PYTHON_DIR) && $(PYTHON_BIN) scripts/sync_data.py --type futures

# Python数据同步 - 交易日历
py-sync-calendar:
	cd $(PYTHON_DIR) && $(PYTHON_BIN) scripts/sync_data.py --type calendar --start 20240101 --end 20241231

# Python数据同步 - K线
py-sync-klines:
	cd $(PYTHON_DIR) && $(PYTHON_BIN) scripts/sync_data.py --type klines --symbol 000001.SZ --start 20240301 --end 20240307 --freq 1d

# Python测试
py-test:
	cd $(PYTHON_DIR) && $(PYTHON_BIN) -m pytest tests/ -v

# Python代码格式化
py-fmt:
	cd $(PYTHON_DIR) && $(PYTHON_BIN) -m black app/ --line-length 100

# Python类型检查
py-lint:
	cd $(PYTHON_DIR) && $(PYTHON_BIN) -m mypy app/ --ignore-missing-imports

# ==================== 数据库命令 ====================

# 初始化数据库（Go方式，使用SQL脚本）
db-init:
	psql $(DATABASE_URL) -f memory/2026-03-07-database-schema.sql

# 初始化数据库（Python方式，使用SQLAlchemy）
db-init-py:
	cd $(PYTHON_DIR) && $(PYTHON_BIN) -c "from app.repositories.database import init_db; init_db()"

# ==================== Docker 命令 ====================

# Docker构建（Go版本）
docker-build:
	docker build -t $(DOCKER_IMAGE) .

# Docker构建（Python版本）
docker-build-py:
	docker build -t $(DOCKER_IMAGE)-python -f $(PYTHON_DIR)/Dockerfile $(PYTHON_DIR)

# Docker运行
docker-run:
	docker run -d -p 8080:8080 --name market-data $(DOCKER_IMAGE)

# ==================== 其他命令 ====================

# 格式化Go代码
fmt:
	go fmt ./...

# Go代码检查
lint:
	golangci-lint run

# 清理构建产物
clean:
	rm -rf bin/
	rm -rf $(PYTHON_DIR)/__pycache__
	rm -rf $(PYTHON_DIR)/app/__pycache__
	find $(PYTHON_DIR) -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true

# 查看帮助
help:
	@echo "╔════════════════════════════════════════════════════════════════╗"
	@echo "║         统一行情数据服务 - Makefile 命令帮助                  ║"
	@echo "╚════════════════════════════════════════════════════════════════╝"
	@echo ""
	@echo "【Go 命令】"
	@echo "  make build        - 构建 Go 服务二进制文件"
	@echo "  make build-sync   - 构建 Go 数据同步工具"
	@echo "  make build-all    - 构建所有 Go 二进制文件"
	@echo "  make run          - 运行 Go 服务（开发模式）"
	@echo "  make deps         - 下载 Go 依赖"
	@echo "  make test         - 运行 Go 测试"
	@echo ""
	@echo "【Python 命令】"
	@echo "  make py-venv      - 创建 Python 虚拟环境"
	@echo "  make py-deps      - 安装 Python 依赖"
	@echo "  make py-run       - 运行 Python 服务（直接）"
	@echo "  make py-run-uvicorn - 运行 Python 服务（Uvicorn热重载）"
	@echo "  make py-run-prod  - 运行 Python 服务（生产模式）"
	@echo "  make py-test      - 运行 Python 测试"
	@echo ""
	@echo "【数据同步 - Go】"
	@echo "  make sync-stocks   - 同步股票列表"
	@echo "  make sync-futures  - 同步期货列表"
	@echo "  make sync-calendar - 同步交易日历"
	@echo "  make sync-klines   - 同步K线数据"
	@echo ""
	@echo "【数据同步 - Python】"
	@echo "  make py-sync-stocks   - 同步股票列表"
	@echo "  make py-sync-futures  - 同步期货列表"
	@echo "  make py-sync-calendar - 同步交易日历"
	@echo "  make py-sync-klines   - 同步K线数据"
	@echo ""
	@echo "【数据库】"
	@echo "  make db-init      - 初始化数据库（Go SQL脚本）"
	@echo "  make db-init-py   - 初始化数据库（Python SQLAlchemy）"
	@echo ""
	@echo "【Docker】"
	@echo "  make docker-build    - 构建 Docker 镜像（Go）"
	@echo "  make docker-build-py - 构建 Docker 镜像（Python）"
	@echo ""
	@echo "【其他】"
	@echo "  make clean        - 清理构建产物"
	@echo "  make fmt          - 格式化 Go 代码"
	@echo "  make py-fmt       - 格式化 Python 代码（black）"
	@echo "  make help         - 显示本帮助"
	@echo ""
	@echo "【快速开始】"
	@echo "  1. Go实现:   make deps && make run"
	@echo "  2. Python实现: make py-venv && make py-deps && make py-run-uvicorn"
