# ============================================================================
# MAKEFILE - COOP-CA AMIFOND Backend
# Commandes de développement et déploiement
# ============================================================================

.PHONY: help install dev staging prod test clean storage

# Variables
PYTHON = python
PIP = pip
MANAGE = $(PYTHON) manage.py

# Couleurs pour l'affichage
RED = \033[0;31m
GREEN = \033[0;32m
YELLOW = \033[1;33m
BLUE = \033[0;34m
NC = \033[0m # No Color

# Aide par défaut
help:
	@echo "🏦 $(GREEN)COOP-CA AMIFOND Backend - Commandes disponibles$(NC)"
	@echo "========================================================"
	@echo ""
	@echo "📦 $(BLUE)Installation:$(NC)"
	@echo "  make install          - Installer toutes les dépendances"
	@echo "  make install-dev      - Installer dépendances dev supplémentaires"
	@echo ""
	@echo "🚀 $(BLUE)Environnements:$(NC)"
	@echo "  make dev              - Environnement développement (local)"
	@echo "  make staging          - Environnement staging (MinIO + PostgreSQL)"
	@echo "  make prod             - Environnement production (Cloudinary)"
	@echo ""
	@echo "🔧 $(BLUE)Gestion:$(NC)"
	@echo "  make migrate          - Appliquer les migrations"
	@echo "  make superuser        - Créer un superutilisateur"
	@echo "  make shell            - Shell Django"
	@echo "  make test             - Lancer les tests"
	@echo "  make storage          - Tester configuration stockage"
	@echo ""
	@echo "📁 $(BLUE)Stockage:$(NC)"
	@echo "  make storage-local    - Configurer stockage local"
	@echo "  make storage-minio    - Configurer MinIO (staging)"
	@echo "  make storage-s3       - Configurer AWS S3"
	@echo "  make storage-cloudinary - Configurer Cloudinary"
	@echo ""
	@echo "🐳 $(BLUE)Docker:$(NC)"
	@echo "  make docker-dev       - Démarrer services développement"
	@echo "  make docker-stop      - Arrêter tous les services"
	@echo "  make docker-clean     - Nettoyer containers et volumes"
	@echo ""
	@echo "🧹 $(BLUE)Nettoyage:$(NC)"
	@echo "  make clean            - Nettoyer fichiers temporaires"
	@echo "  make clean-migrations - Supprimer migrations (⚠️  DANGER)"

# ============================================================================
# 📦 INSTALLATION
# ============================================================================

install:
	@echo "$(GREEN)📦 Installation des dépendances...$(NC)"
	$(PIP) install -r requirements.txt
	@echo "$(GREEN)✅ Installation terminée$(NC)"

install-dev: install
	@echo "$(GREEN)📦 Installation des dépendances de développement...$(NC)"
	$(PIP) install black flake8 pytest-django django-extensions
	@echo "$(GREEN)✅ Dépendances dev installées$(NC)"

# ============================================================================
# 🚀 ENVIRONNEMENTS
# ============================================================================

dev:
	@echo "$(GREEN)🚀 Configuration environnement DÉVELOPPEMENT$(NC)"
	@cp .env.example .env 2>/dev/null || true
	@echo "IS_CLOUDINARY=False" > .env.local
	@echo "DEBUG=True" >> .env.local
	@$(MAKE) migrate
	@echo "$(GREEN)✅ Prêt pour le développement local$(NC)"
	@echo "$(YELLOW)💡 Stockage: Local (media/)$(NC)"

staging:
	@echo "$(GREEN)🚀 Configuration environnement STAGING$(NC)"
	@$(MAKE) docker-dev
	@echo "IS_CLOUDINARY=False" > .env.staging
	@echo "AWS_STORAGE_BUCKET_NAME=amifond-staging" >> .env.staging
	@echo "AWS_S3_ENDPOINT_URL=http://localhost:9000" >> .env.staging
	@echo "DATABASE_URL=postgresql://amifond_user:amifond_pass@localhost:5432/amifond_db" >> .env.staging
	@echo "$(GREEN)✅ Prêt pour staging$(NC)"
	@echo "$(YELLOW)💡 Stockage: MinIO (localhost:9000)$(NC)"
	@echo "$(YELLOW)💡 Base: PostgreSQL (localhost:5432)$(NC)"

prod:
	@echo "$(GREEN)🚀 Configuration environnement PRODUCTION$(NC)"
	@echo "IS_CLOUDINARY=True" > .env.production
	@echo "DEBUG=False" >> .env.production
	@echo "$(YELLOW)⚠️  Complétez la configuration dans .env.production:$(NC)"
	@echo "  - CLOUDINARY_CLOUD_NAME"
	@echo "  - CLOUDINARY_API_KEY"
	@echo "  - CLOUDINARY_API_SECRET"
	@echo "  - SECRET_KEY"
	@echo "  - DATABASE_URL"

# ============================================================================
# 🔧 GESTION DJANGO
# ============================================================================

migrate:
	@echo "$(GREEN)🔧 Application des migrations...$(NC)"
	$(MANAGE) makemigrations
	$(MANAGE) migrate
	@echo "$(GREEN)✅ Migrations appliquées$(NC)"

superuser:
	@echo "$(GREEN)👤 Création d'un superutilisateur...$(NC)"
	$(MANAGE) createsuperuser

shell:
	@echo "$(GREEN)🐍 Démarrage du shell Django...$(NC)"
	$(MANAGE) shell_plus

collectstatic:
	@echo "$(GREEN)📦 Collecte des fichiers statiques...$(NC)"
	$(MANAGE) collectstatic --noinput

# ============================================================================
# 🧪 TESTS
# ============================================================================

test:
	@echo "$(GREEN)🧪 Lancement des tests...$(NC)"
	$(MANAGE) test

storage:
	@echo "$(GREEN)🔍 Test de la configuration stockage...$(NC)"
	$(PYTHON) test_storage.py

# ============================================================================
# 📁 CONFIGURATION STOCKAGE
# ============================================================================

storage-local:
	@echo "$(GREEN)📁 Configuration stockage LOCAL$(NC)"
	@echo "IS_CLOUDINARY=False" > .env.storage
	@echo "# Pas de config S3 = Fallback local" >> .env.storage
	@echo "$(GREEN)✅ Stockage local configuré$(NC)"

storage-minio:
	@echo "$(GREEN)🐳 Configuration stockage MINIO$(NC)"
	@echo "IS_CLOUDINARY=False" > .env.storage
	@echo "AWS_STORAGE_BUCKET_NAME=amifond-bucket" >> .env.storage
	@echo "AWS_S3_ENDPOINT_URL=http://localhost:9000" >> .env.storage
	@echo "AWS_ACCESS_KEY_ID=minioadmin" >> .env.storage
	@echo "AWS_SECRET_ACCESS_KEY=minioadmin123" >> .env.storage
	@$(MAKE) docker-dev
	@echo "$(GREEN)✅ MinIO configuré$(NC)"

storage-s3:
	@echo "$(GREEN)☁️  Configuration stockage AWS S3$(NC)"
	@echo "IS_CLOUDINARY=False" > .env.storage
	@echo "AWS_STORAGE_BUCKET_NAME=your-bucket-name" >> .env.storage
	@echo "AWS_ACCESS_KEY_ID=your-access-key" >> .env.storage
	@echo "AWS_SECRET_ACCESS_KEY=your-secret-key" >> .env.storage
	@echo "AWS_S3_REGION_NAME=eu-west-1" >> .env.storage
	@echo "$(YELLOW)⚠️  Complétez les credentials AWS dans .env.storage$(NC)"

storage-cloudinary:
	@echo "$(GREEN)🌥️  Configuration stockage CLOUDINARY$(NC)"
	@echo "IS_CLOUDINARY=True" > .env.storage
	@echo "CLOUDINARY_CLOUD_NAME=your-cloud-name" >> .env.storage
	@echo "CLOUDINARY_API_KEY=your-api-key" >> .env.storage
	@echo "CLOUDINARY_API_SECRET=your-api-secret" >> .env.storage
	@echo "$(YELLOW)⚠️  Complétez les credentials Cloudinary dans .env.storage$(NC)"

# ============================================================================
# 🐳 DOCKER
# ============================================================================

docker-dev:
	@echo "$(GREEN)🐳 Démarrage des services de développement...$(NC)"
	docker-compose -f docker-compose.dev.yml up -d
	@echo "$(GREEN)✅ Services démarrés:$(NC)"
	@echo "  📦 MinIO: http://localhost:9001 (minioadmin/minioadmin123)"
	@echo "  🗄️  PostgreSQL: localhost:5432"
	@echo "  📮 MailHog: http://localhost:8025"
	@echo "  🔄 Redis: localhost:6379"

docker-stop:
	@echo "$(YELLOW)🛑 Arrêt des services Docker...$(NC)"
	docker-compose -f docker-compose.dev.yml down

docker-clean:
	@echo "$(RED)🧹 Nettoyage Docker (containers + volumes)...$(NC)"
	docker-compose -f docker-compose.dev.yml down -v --remove-orphans
	docker system prune -f

# ============================================================================
# 🧹 NETTOYAGE
# ============================================================================

clean:
	@echo "$(GREEN)🧹 Nettoyage des fichiers temporaires...$(NC)"
	find . -type f -name "*.pyc" -delete
	find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
	find . -name "*.log" -delete
	@echo "$(GREEN)✅ Nettoyage terminé$(NC)"

clean-migrations:
	@echo "$(RED)⚠️  DANGER: Suppression des migrations...$(NC)"
	@read -p "Êtes-vous sûr? (y/N): " -n 1 -r; \
	if [[ $$REPLY =~ ^[Yy]$$ ]]; then \
		find . -path "*/migrations/*.py" -not -name "__init__.py" -delete; \
		find . -path "*/migrations/*.pyc" -delete; \
		echo "$(RED)🗑️  Migrations supprimées$(NC)"; \
	else \
		echo "$(GREEN)✅ Annulé$(NC)"; \
	fi

# ============================================================================
# 🏃 DÉMARRAGE RAPIDE
# ============================================================================

run:
	@echo "$(GREEN)🏃 Démarrage du serveur de développement...$(NC)"
	$(MANAGE) runserver 0.0.0.0:8000

# Commande par défaut
.DEFAULT_GOAL := help
