.PHONY: help dev dev-full stop status logs build build-remote build-both test test-coverage lint typecheck e2e check clean install sync test-ci

help:
	@echo "Aeroflot.Flights.Web — Available commands:"
	@echo ""
	@echo "  Development:"
	@echo "    make dev          - Start Modern.js dev server (:8080)"
	@echo "    make dev-full     - Start dev server with API proxy (:8080)"
	@echo "    make stop         - Stop running dev server"
	@echo "    make status       - Check if dev server is running"
	@echo "    make logs         - View dev server logs (tail -f)"
	@echo ""
	@echo "  Building:"
	@echo "    make build        - Build standalone SSR server"
	@echo "    make build-remote - Build MF remote (mf-manifest.json)"
	@echo "    make build-both   - Build standalone + remote"
	@echo "    make clean        - Clean build artifacts"
	@echo ""
	@echo "  Testing & Quality:"
	@echo "    make test         - Run unit tests (Vitest)"
	@echo "    make test-coverage - Run tests with coverage"
	@echo "    make lint         - Lint code (ESLint)"
	@echo "    make typecheck    - Type check (TypeScript)"
	@echo "    make check        - Run typecheck + lint + test"
	@echo "    make test-ci      - Run CI script unit tests (bash)"
	@echo ""
	@echo "  E2E Testing:"
	@echo "    make e2e          - Run Playwright E2E tests"
	@echo ""
	@echo "  Deployment:"
	@echo "    make sync         - Sync files to flights-front repo"
	@echo ""
	@echo "  Setup:"
	@echo "    make install      - Install dependencies (pnpm install)"

PNPM := pnpm
PID_FILE := .dev.pid
LOG_FILE := .dev.log
API_TARGET ?= https://flights.test.aeroflot.ru
TRACKER_TARGET ?= https://platform.test.aeroflot.ru
SIGNALR_HUB_URL ?= http://localhost:8080/tracker/hub

# Development
dev:
	@echo "Starting Modern.js dev server in background..."
	@nohup $(PNPM) dev > $(LOG_FILE) 2>&1 & echo $$! > $(PID_FILE)
	@echo "Dev server started (PID: $$(cat $(PID_FILE)))"
	@echo "View logs: make logs"

dev-full:
	@echo "Starting dev server with API proxy in background..."
	@API_TARGET="$(API_TARGET)" TRACKER_TARGET="$(TRACKER_TARGET)" SIGNALR_HUB_URL="$(SIGNALR_HUB_URL)" nohup node scripts/dev-server.mjs > $(LOG_FILE) 2>&1 & echo $$! > $(PID_FILE)
	@echo "Dev server started (PID: $$(cat $(PID_FILE)))"
	@echo "  App & API:  http://localhost:8080"
	@echo "  API target: $(API_TARGET)"
	@echo "  Tracker target: $(TRACKER_TARGET)"
	@echo "  SignalR hub: $(SIGNALR_HUB_URL)"
	@echo "View logs: make logs"

stop:
	@echo "Stopping dev server..."
	@if [ -f $(PID_FILE) ]; then \
		kill $$(cat $(PID_FILE)) 2>/dev/null || true; \
		rm -f $(PID_FILE); \
	fi
	@pkill -f "modern dev" 2>/dev/null || true
	@pkill -f "node scripts/dev-server" 2>/dev/null || true
	@lsof -ti:8080 -ti:8081 2>/dev/null | xargs kill 2>/dev/null || true
	@echo "Stopped"

status:
	@if [ -f $(PID_FILE) ] && ps -p $$(cat $(PID_FILE)) > /dev/null 2>&1; then \
		echo "Dev server is running (PID: $$(cat $(PID_FILE)))"; \
	else \
		rm -f $(PID_FILE) 2>/dev/null; \
		echo "Dev server is not running"; \
	fi

logs:
	@if [ -f $(LOG_FILE) ]; then \
		tail -f $(LOG_FILE); \
	else \
		echo "No log file. Start server with: make dev"; \
	fi

# Building
build:
	$(PNPM) build:standalone

build-remote:
	$(PNPM) build:remote

build-both:
	$(PNPM) build:both

clean:
	rm -rf dist/
	@echo "Clean complete"

# Testing & Quality
test:
	$(PNPM) test

test-coverage:
	$(PNPM) test:coverage

lint:
	$(PNPM) lint

typecheck:
	$(PNPM) typecheck

check: typecheck lint test

# E2E
e2e:
	$(PNPM) test:e2e

# Deployment
sync:
	./scripts/sync-to-flights-front.sh

# Setup
install:
	$(PNPM) install

# CI-script unit tests
test-ci:
	$(PNPM) test:ci
