# ==============================================================================
# DIRECTORIES
# ==============================================================================
DIR_ROOT       := $(dir $(abspath $(MAKEFILE_LIST)))
DIR_TOOLS      := $(addsuffix /, $(DIR_ROOT)tools)

# ==============================================================================
# TARGET NAMES
# ==============================================================================
TARGET_NAME    := coffee_crisis_arcade_edition
ifeq ($(OS),Windows_NT)
    TARGET_FILE := $(DIR_ROOT)$(TARGET_NAME).exe
else
    TARGET_FILE := $(DIR_ROOT)$(TARGET_NAME)
endif
APP_NAME       := Coffee Crisis Arcade Edition
DIST_DIR       := dist
RELEASE_FOLDER := dist/_tmp
RELEASE_FILE   := $(RELEASE_FOLDER)/$(TARGET_NAME)
RESOURCE_FILE  := release/windows/coffee.res

# ==============================================================================
# TOOLS
# ==============================================================================
DIR_PACK_TOOL  := $(DIR_TOOLS)pack_resources
SHADER_SCRIPT  := $(DIR_ROOT)tools/shaders/compile_spirv.sh

# ==============================================================================
# VERSION (fecha actual)
# ==============================================================================
ifeq ($(OS),Windows_NT)
    VERSION := $(shell powershell -Command "Get-Date -Format 'yyyy-MM-dd'")
else
    VERSION := $(shell date +%Y-%m-%d)
endif

# ==============================================================================
# SHELL (Windows usa cmd.exe)
# ==============================================================================
ifeq ($(OS),Windows_NT)
    SHELL := cmd.exe
endif

# ==============================================================================
# WINDOWS-SPECIFIC VARIABLES
# ==============================================================================
ifeq ($(OS),Windows_NT)
    WIN_TARGET_FILE    := $(DIR_ROOT)$(APP_NAME)
    WIN_RELEASE_FILE   := $(RELEASE_FOLDER)/$(APP_NAME)
else
    WIN_TARGET_FILE    := $(TARGET_FILE)
    WIN_RELEASE_FILE   := $(RELEASE_FILE)
endif

# ==============================================================================
# RELEASE NAMES
# ==============================================================================
WINDOWS_RELEASE             := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-win32-x64.zip
MACOS_INTEL_RELEASE         := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-macos-intel.dmg
MACOS_APPLE_SILICON_RELEASE := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-macos-apple-silicon.dmg
LINUX_RELEASE               := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-linux.tar.gz
RASPI_RELEASE               := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-raspberry.tar.gz

# ==============================================================================
# PLATAFORMA
# ==============================================================================
ifeq ($(OS),Windows_NT)
    FixPath         = $(subst /,\\,$1)
    RM              := del /Q
    MKDIR           := mkdir
else
    FixPath         = $1
    RMFILE          := rm -f
    RMDIR           := rm -rdf
    MKDIR           := mkdir -p
    UNAME_S         := $(shell uname -s)
endif

# ==============================================================================
# COMPILACIÓN CON CMAKE
# ==============================================================================
all:
	@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
	@cmake --build build

debug:
	@cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
	@cmake --build build

# ==============================================================================
# RELEASE AUTOMÁTICO (detecta SO)
# ==============================================================================
release:
ifeq ($(OS),Windows_NT)
	@"$(MAKE)" windows_release
else
ifeq ($(UNAME_S),Darwin)
	@$(MAKE) macos_release
else
	@$(MAKE) linux_release
endif
endif

# ==============================================================================
# REGLAS PARA HERRAMIENTA DE EMPAQUETADO Y RESOURCES.PACK
# ==============================================================================
pack_tool:
	@$(MAKE) -C $(DIR_PACK_TOOL)

resources.pack:
	@$(MAKE) -C $(DIR_PACK_TOOL) pack

# ==============================================================================
# COMPILACIÓN DE SHADERS
# ==============================================================================
spirv:
	@echo "Compilando shaders SPIR-V..."
	$(SHADER_SCRIPT)

# ==============================================================================
# COMPILACIÓN PARA WINDOWS (RELEASE)
# ==============================================================================
windows_release:
	@$(MAKE) resources.pack
	@echo off
	@echo Creando release para Windows - Version: $(VERSION)

# Compila con cmake
	@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
	@cmake --build build

# Crea carpeta de distribución y carpeta temporal 'RELEASE_FOLDER'
	@powershell -Command "if (-not (Test-Path '$(DIST_DIR)')) {New-Item '$(DIST_DIR)' -ItemType Directory}"
	@powershell -Command "if (Test-Path '$(RELEASE_FOLDER)') {Remove-Item '$(RELEASE_FOLDER)' -Recurse -Force}"
	@powershell -Command "if (-not (Test-Path '$(RELEASE_FOLDER)')) {New-Item '$(RELEASE_FOLDER)' -ItemType Directory}"

# Copia la carpeta 'config' y el archivo 'resources.pack'
	@powershell -Command "Copy-Item -Path 'config' -Destination '$(RELEASE_FOLDER)' -recurse -Force"
	@powershell -Command "Copy-Item -Path 'resources.pack' -Destination '$(RELEASE_FOLDER)'"

# Copia los ficheros que estan en la raíz del proyecto
	@powershell -Command "Copy-Item 'LICENSE' -Destination '$(RELEASE_FOLDER)'"
	@powershell -Command "Copy-Item 'README.md' -Destination '$(RELEASE_FOLDER)'"
	@powershell -Command "Copy-Item 'release\windows\dll\*.dll' -Destination '$(RELEASE_FOLDER)'"
	@powershell -Command "Copy-Item -Path '$(TARGET_FILE)' -Destination '$(WIN_RELEASE_FILE).exe'"
	strip -s -R .comment -R .gnu.version "$(WIN_RELEASE_FILE).exe" --strip-unneeded

# Crea el fichero .zip
	@powershell -Command "if (Test-Path '$(WINDOWS_RELEASE)') {Remove-Item '$(WINDOWS_RELEASE)'}"
	@powershell -Command "Compress-Archive -Path '$(RELEASE_FOLDER)/*' -DestinationPath '$(WINDOWS_RELEASE)'"
	@echo Release creado: $(WINDOWS_RELEASE)

# Elimina la carpeta temporal 'RELEASE_FOLDER'
	@powershell -Command "if (Test-Path '$(RELEASE_FOLDER)') {Remove-Item '$(RELEASE_FOLDER)' -Recurse -Force}"

# ==============================================================================
# COMPILACIÓN PARA MACOS (RELEASE)
# ==============================================================================
macos_release:
	@$(MAKE) resources.pack
	@echo "Creando release para macOS - Version: $(VERSION)"

# Verificar e instalar create-dmg si es necesario
	@which create-dmg > /dev/null || (echo "Instalando create-dmg..." && brew install create-dmg)

# Compila la versión para procesadores Intel con cmake
	@cmake -S . -B build/intel -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 -DMACOS_BUNDLE=ON
	@cmake --build build/intel

# Elimina datos de compilaciones anteriores
	$(RMDIR) "$(RELEASE_FOLDER)"
	$(RMFILE) tmp.dmg
	$(RMFILE) "$(DIST_DIR)"/rw.*
	$(RMFILE) "$(MACOS_INTEL_RELEASE)"
	$(RMFILE) "$(MACOS_APPLE_SILICON_RELEASE)"

# Crea la carpeta de distribución y la carpeta temporal con las carpetas obligatorias para una app macOS
	$(MKDIR) "$(DIST_DIR)"
	$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks"
	$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS"
	$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"

# Copia carpetas y ficheros
	cp -R config "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
	cp resources.pack "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
	cp -R release/macos/frameworks/SDL3.xcframework/macos-arm64_x86_64/SDL3.framework "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks"
	cp release/icons/*.icns "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
	cp release/macos/Info.plist "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents"
	cp LICENSE "$(RELEASE_FOLDER)"
	cp README.md "$(RELEASE_FOLDER)"

# Copia el ejecutable Intel al bundle
	cp "$(TARGET_FILE)" "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS/$(TARGET_NAME)"

# Firma la aplicación
	codesign --deep --force --sign - --timestamp=none "$(RELEASE_FOLDER)/$(APP_NAME).app"

# Empaqueta el .dmg de la versión Intel con create-dmg
	@echo "Creando DMG Intel con iconos de 96x96..."
	create-dmg \
	  --volname "$(APP_NAME)" \
	  --window-pos 200 120 \
	  --window-size 720 300 \
	  --icon-size 96 \
	  --text-size 12 \
	  --icon "$(APP_NAME).app" 278 102 \
	  --icon "LICENSE" 441 102 \
	  --icon "README.md" 604 102 \
	  --app-drop-link 115 102 \
	  --hide-extension "$(APP_NAME).app" \
	  "$(MACOS_INTEL_RELEASE)" \
	  "$(RELEASE_FOLDER)" || true
	@echo "Release Intel creado: $(MACOS_INTEL_RELEASE)"

# Compila la versión para procesadores Apple Silicon con cmake
	@cmake -S . -B build/arm -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 -DMACOS_BUNDLE=ON
	@cmake --build build/arm
	cp "$(TARGET_FILE)" "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS/$(TARGET_NAME)"

# Firma la aplicación
	codesign --deep --force --sign - --timestamp=none "$(RELEASE_FOLDER)/$(APP_NAME).app"

# Empaqueta el .dmg de la versión Apple Silicon con create-dmg
	@echo "Creando DMG Apple Silicon con iconos de 96x96..."
	create-dmg \
	  --volname "$(APP_NAME)" \
	  --window-pos 200 120 \
	  --window-size 720 300 \
	  --icon-size 96 \
	  --text-size 12 \
	  --icon "$(APP_NAME).app" 278 102 \
	  --icon "LICENSE" 441 102 \
	  --icon "README.md" 604 102 \
	  --app-drop-link 115 102 \
	  --hide-extension "$(APP_NAME).app" \
	  "$(MACOS_APPLE_SILICON_RELEASE)" \
	  "$(RELEASE_FOLDER)" || true
	@echo "Release Apple Silicon creado: $(MACOS_APPLE_SILICON_RELEASE)"

# Elimina las carpetas temporales
	$(RMDIR) "$(RELEASE_FOLDER)"
	$(RMDIR) build/intel
	$(RMDIR) build/arm
	$(RMFILE) "$(DIST_DIR)"/rw.*

# ==============================================================================
# COMPILACIÓN PARA LINUX (RELEASE)
# ==============================================================================
linux_release:
	@$(MAKE) resources.pack
	@echo "Creando release para Linux - Version: $(VERSION)"

# Compila con cmake
	@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
	@cmake --build build

# Elimina carpeta temporal previa y la recrea (crea dist/ si no existe)
	$(RMDIR) "$(RELEASE_FOLDER)"
	$(MKDIR) "$(RELEASE_FOLDER)"

# Copia ficheros
	cp -R config "$(RELEASE_FOLDER)"
	cp resources.pack "$(RELEASE_FOLDER)"
	cp LICENSE "$(RELEASE_FOLDER)"
	cp README.md "$(RELEASE_FOLDER)"
	cp "$(TARGET_FILE)" "$(RELEASE_FILE)"
	strip -s -R .comment -R .gnu.version "$(RELEASE_FILE)" --strip-unneeded

# Empaqueta ficheros
	$(RMFILE) "$(LINUX_RELEASE)"
	tar -czvf "$(LINUX_RELEASE)" -C "$(RELEASE_FOLDER)" .
	@echo "Release creado: $(LINUX_RELEASE)"

# Elimina la carpeta temporal
	$(RMDIR) "$(RELEASE_FOLDER)"

# ==============================================================================
# COMPILACIÓN PARA LINUX (RELEASE CON INTEGRACIÓN DESKTOP)
# ==============================================================================
linux_release_desktop:
	@$(MAKE) resources.pack
	@echo "Creando release con integracion desktop para Linux - Version: $(VERSION)"

# Compila con cmake
	@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
	@cmake --build build

# Elimina carpetas previas y recrea (crea dist/ si no existe)
	$(RMDIR) "$(RELEASE_FOLDER)"

# Crea la estructura de directorios estándar para Linux
	$(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)"
	$(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)/bin"
	$(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications"
	$(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps"
	$(MKDIR) "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/$(TARGET_NAME)"

# Copia ficheros del juego
	cp -R config "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/$(TARGET_NAME)/"
	cp resources.pack "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/$(TARGET_NAME)/"
	cp LICENSE "$(RELEASE_FOLDER)/$(TARGET_NAME)/"
	cp README.md "$(RELEASE_FOLDER)/$(TARGET_NAME)/"

# Copia el ejecutable
	cp "$(TARGET_FILE)" "$(RELEASE_FOLDER)/$(TARGET_NAME)/bin/$(TARGET_NAME)"
	strip -s -R .comment -R .gnu.version "$(RELEASE_FOLDER)/$(TARGET_NAME)/bin/$(TARGET_NAME)" --strip-unneeded

# Crea el archivo .desktop
	@echo '[Desktop Entry]' > "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
	@echo 'Version=1.0' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
	@echo 'Type=Application' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
	@echo 'Name=$(APP_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
	@echo 'Comment=Arcade action game - defend Earth from alien invasion!' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
	@echo 'Exec=/opt/$(TARGET_NAME)/bin/$(TARGET_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
	@echo 'Icon=$(TARGET_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
	@echo 'Path=/opt/$(TARGET_NAME)/share/$(TARGET_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
	@echo 'Terminal=false' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
	@echo 'StartupNotify=true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
	@echo 'Categories=Game;ArcadeGame;' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"
	@echo 'Keywords=arcade;action;shooter;retro;' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop"

# Copia el icono (si existe) y lo redimensiona si es necesario
	@if [ -f "release/icons/icon.png" ]; then \
		if command -v magick >/dev/null 2>&1; then \
			magick "release/icons/icon.png" -resize 256x256 "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png"; \
			echo "Icono redimensionado de release/icons/icon.png (usando ImageMagick)"; \
		elif command -v convert >/dev/null 2>&1; then \
			convert "release/icons/icon.png" -resize 256x256 "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png"; \
			echo "Icono redimensionado de release/icons/icon.png (usando ImageMagick legacy)"; \
		elif command -v ffmpeg >/dev/null 2>&1; then \
			ffmpeg -i "release/icons/icon.png" -vf scale=256:256 "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png" -y -loglevel quiet; \
			echo "Icono redimensionado de release/icons/icon.png (usando ffmpeg)"; \
		else \
			cp "release/icons/icon.png" "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png"; \
			echo "Icono copiado sin redimensionar (instalar ImageMagick o ffmpeg para redimensionado automatico)"; \
		fi; \
	else \
		echo "Advertencia: No se encontró release/icons/icon.png - crear icono manualmente"; \
	fi

# Crea script de instalación
	@echo '#!/bin/bash' > "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	@echo 'echo "Instalando $(APP_NAME)..."' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	@echo 'sudo mkdir -p /opt/$(TARGET_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	@echo 'sudo cp -R bin /opt/$(TARGET_NAME)/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	@echo 'sudo cp -R share /opt/$(TARGET_NAME)/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	@echo 'sudo cp LICENSE /opt/$(TARGET_NAME)/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	@echo 'sudo cp README.md /opt/$(TARGET_NAME)/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	@echo 'sudo mkdir -p /usr/share/applications' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	@echo 'sudo mkdir -p /usr/share/icons/hicolor/256x256/apps' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	@echo 'sudo cp /opt/$(TARGET_NAME)/share/applications/$(TARGET_NAME).desktop /usr/share/applications/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	@echo 'sudo cp /opt/$(TARGET_NAME)/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png /usr/share/icons/hicolor/256x256/apps/' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	@echo 'sudo update-desktop-database /usr/share/applications 2>/dev/null || true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	@echo 'sudo gtk-update-icon-cache /usr/share/icons/hicolor 2>/dev/null || true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	@echo 'echo "$(APP_NAME) instalado correctamente!"' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	@echo 'echo "Ya puedes encontrarlo en el menu de aplicaciones en la categoria Juegos."' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"
	chmod +x "$(RELEASE_FOLDER)/$(TARGET_NAME)/install.sh"

# Crea script de desinstalación
	@echo '#!/bin/bash' > "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
	@echo 'echo "Desinstalando $(APP_NAME)..."' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
	@echo 'sudo rm -rf /opt/$(TARGET_NAME)' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
	@echo 'sudo rm -f /usr/share/applications/$(TARGET_NAME).desktop' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
	@echo 'sudo rm -f /usr/share/icons/hicolor/256x256/apps/$(TARGET_NAME).png' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
	@echo 'sudo update-desktop-database /usr/share/applications 2>/dev/null || true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
	@echo 'sudo gtk-update-icon-cache /usr/share/icons/hicolor 2>/dev/null || true' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
	@echo 'echo "$(APP_NAME) desinstalado correctamente."' >> "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"
	chmod +x "$(RELEASE_FOLDER)/$(TARGET_NAME)/uninstall.sh"

# Empaqueta ficheros
	$(RMFILE) "$(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-linux-desktop.tar.gz"
	tar -czvf "$(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-linux-desktop.tar.gz" -C "$(RELEASE_FOLDER)" .
	@echo "Release con integracion desktop creado: $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-linux-desktop.tar.gz"
	@echo "Para instalar: extraer y ejecutar ./$(TARGET_NAME)/install.sh"

# Elimina la carpeta temporal
	$(RMDIR) "$(RELEASE_FOLDER)"

# ==============================================================================
# COMPILACIÓN PARA RASPBERRY PI (RELEASE)
# ==============================================================================
raspi_release:
	@$(MAKE) resources.pack
	@echo "Creando release para Raspberry Pi - Version: $(VERSION)"

# Compila con cmake
	@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
	@cmake --build build

# Elimina carpetas previas y recrea (crea dist/ si no existe)
	$(RMDIR) "$(RELEASE_FOLDER)"
	$(MKDIR) "$(RELEASE_FOLDER)"

# Copia ficheros
	cp -R config "$(RELEASE_FOLDER)"
	cp resources.pack "$(RELEASE_FOLDER)"
	cp LICENSE "$(RELEASE_FOLDER)"
	cp README.md "$(RELEASE_FOLDER)"
	cp "$(TARGET_FILE)" "$(RELEASE_FILE)"
	strip -s -R .comment -R .gnu.version "$(RELEASE_FILE)" --strip-unneeded

# Empaqueta ficheros
	$(RMFILE) "$(RASPI_RELEASE)"
	tar -czvf "$(RASPI_RELEASE)" -C "$(RELEASE_FOLDER)" .
	@echo "Release creado: $(RASPI_RELEASE)"

# Elimina la carpeta temporal
	$(RMDIR) "$(RELEASE_FOLDER)"

# ==============================================================================
# CODE QUALITY (delegados a cmake)
# ==============================================================================
format:
	@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
	@cmake --build build --target format

format-check:
	@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
	@cmake --build build --target format-check

tidy:
	@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
	@cmake --build build --target tidy

tidy-fix:
	@cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
	@cmake --build build --target tidy-fix

# ==============================================================================
# REGLAS ESPECIALES
# ==============================================================================
show_version:
	@echo "Version actual: $(VERSION)"

help:
	@echo "Makefile para Coffee Crisis Arcade Edition"
	@echo "Comandos disponibles:"
	@echo ""
	@echo "  Compilacion:"
	@echo "    make                     - Compilar con cmake (Release)"
	@echo "    make debug               - Compilar con cmake (Debug)"
	@echo ""
	@echo "  Release:"
	@echo "    make release             - Crear release (detecta SO automaticamente)"
	@echo "    make windows_release     - Crear release para Windows"
	@echo "    make linux_release       - Crear release basico para Linux"
	@echo "    make linux_release_desktop - Crear release con integracion desktop para Linux"
	@echo "    make macos_release       - Crear release para macOS"
	@echo "    make raspi_release       - Crear release para Raspberry Pi"
	@echo ""
	@echo "  Herramientas:"
	@echo "    make spirv               - Compilar shaders SPIR-V"
	@echo "    make pack_tool           - Compilar herramienta de empaquetado"
	@echo "    make resources.pack      - Generar pack de recursos desde data/"
	@echo ""
	@echo "  Calidad de codigo:"
	@echo "    make format              - Formatear codigo con clang-format"
	@echo "    make format-check        - Verificar formato sin modificar"
	@echo "    make tidy                - Analisis estatico con clang-tidy"
	@echo "    make tidy-fix            - Analisis estatico con auto-fix"
	@echo ""
	@echo "  Otros:"
	@echo "    make show_version        - Mostrar version actual ($(VERSION))"
	@echo "    make help                - Mostrar esta ayuda"

.PHONY: all debug release windows_release macos_release linux_release linux_release_desktop raspi_release pack_tool resources.pack spirv format format-check tidy tidy-fix show_version help
