# Directorios
DIR_ROOT       := $(dir $(abspath $(MAKEFILE_LIST)))
DIR_SOURCES    := $(addsuffix /, $(DIR_ROOT)source)
DIR_BIN        := $(addsuffix /, $(DIR_ROOT))
DIR_TOOLS      := $(addsuffix /, $(DIR_ROOT)tools)

# Variables
TARGET_NAME    := vibe3_physics
TARGET_FILE    := $(DIR_BIN)$(TARGET_NAME)
APP_NAME       := ViBe3 Physics
RELEASE_FOLDER := dist/_tmp
RELEASE_FILE   := $(RELEASE_FOLDER)/$(TARGET_NAME)
RESOURCE_FILE  := build/vibe3.res
DIST_DIR       := dist

# Variables para herramienta de empaquetado
ifeq ($(OS),Windows_NT)
    PACK_TOOL      := $(DIR_TOOLS)pack_resources.exe
    PACK_CXX       := $(CXX)
else
    PACK_TOOL      := $(DIR_TOOLS)pack_resources
    PACK_CXX       := $(CXX)
endif
PACK_SOURCES   := $(DIR_TOOLS)pack_resources.cpp $(DIR_SOURCES)resource_pack.cpp
PACK_INCLUDES  := -I$(DIR_ROOT)

# Versión automática basada en la fecha actual (formato YYYY.MM.DD para que
# CFBundleShortVersionString del bundle macOS sea conforme a la spec de Apple).
ifeq ($(OS),Windows_NT)
    VERSION := $(shell powershell -Command "Get-Date -Format 'yyyy.MM.dd'")
else
    VERSION := $(shell date +%Y.%m.%d)
endif

# Variables específicas para Windows (usando APP_NAME)
ifeq ($(OS),Windows_NT)
    WIN_TARGET_FILE    := $(DIR_BIN)$(APP_NAME)
    WIN_RELEASE_FILE   := $(RELEASE_FOLDER)/$(APP_NAME)
else
    WIN_TARGET_FILE    := $(TARGET_FILE)
    WIN_RELEASE_FILE   := $(RELEASE_FILE)
endif

# Nombres para los ficheros de lanzamiento
WINDOWS_RELEASE             := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-win32-x64.zip
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

# Lista completa de archivos fuente (detección automática con wildcards, como CMakeLists.txt)
APP_SOURCES := $(wildcard source/*.cpp) \
               $(wildcard source/external/*.cpp) \
               $(wildcard source/gpu/*.cpp) \
               $(wildcard source/shapes/*.cpp) \
               $(wildcard source/themes/*.cpp) \
               $(wildcard source/state/*.cpp) \
               $(wildcard source/input/*.cpp) \
               $(wildcard source/scene/*.cpp) \
               $(wildcard source/shapes_mgr/*.cpp) \
               $(wildcard source/boids_mgr/*.cpp) \
               $(wildcard source/text/*.cpp) \
               $(wildcard source/ui/*.cpp)

# Excluir archivos antiguos si existen
APP_SOURCES := $(filter-out source/main_old.cpp, $(APP_SOURCES))

# Includes: usar shaders pre-compilados si glslc no está disponible
ifeq ($(OS),Windows_NT)
    GLSLC := $(shell where glslc 2>NUL)
else
    GLSLC := $(shell command -v glslc 2>/dev/null)
endif
ifeq ($(GLSLC),)
    SHADER_INCLUDE := -Ishaders/precompiled
else
    SHADER_INCLUDE := -Ibuild/generated_shaders
endif
INCLUDES := -Isource -Isource/external $(SHADER_INCLUDE)

# Variables según el sistema operativo
CXXFLAGS_BASE   := -std=c++20 -Wall
CXXFLAGS        := $(CXXFLAGS_BASE) -Os -ffunction-sections -fdata-sections
LDFLAGS         :=

ifeq ($(OS),Windows_NT)
    FixPath         = $(subst /,\\,$1)
    CXXFLAGS        += -DWINDOWS_BUILD
    LDFLAGS         += -Wl,--gc-sections -static-libstdc++ -static-libgcc \
                       -Wl,-Bstatic -lpthread -Wl,-Bdynamic -Wl,-subsystem,windows \
                       -lmingw32 -lws2_32 -lSDL3 -lSDL3_ttf
    RMFILE          := del /Q
    RMDIR           := rmdir /S /Q
    MKDIR           := mkdir
else
    FixPath         = $1
    LDFLAGS         += -lSDL3 -lSDL3_ttf
    RMFILE          := rm -f
    RMDIR           := rm -rf
    MKDIR           := mkdir -p
    UNAME_S         := $(shell uname -s)
    ifeq ($(UNAME_S),Linux)
        CXXFLAGS       += -DLINUX_BUILD
    endif
    ifeq ($(UNAME_S),Darwin)
        CXXFLAGS       += -DMACOS_BUILD -arch arm64
    endif
endif


# Reglas para herramienta de empaquetado y resources.pack
$(PACK_TOOL): $(PACK_SOURCES)
	@echo "Compilando herramienta de empaquetado..."
	$(PACK_CXX) -std=c++20 -Wall -Os $(PACK_INCLUDES) $(PACK_SOURCES) -o $(PACK_TOOL)
	@echo "✓ Herramienta de empaquetado lista: $(PACK_TOOL)"

pack_tool: $(PACK_TOOL)

# Detectar todos los archivos en data/ como dependencias (regenera si cualquiera cambia)
ifeq ($(OS),Windows_NT)
    DATA_FILES :=
else
    DATA_FILES := $(shell find data -type f 2>/dev/null)
endif

resources.pack: $(PACK_TOOL) $(DATA_FILES)
	@echo "Generando resources.pack desde directorio data/..."
	$(PACK_TOOL) data resources.pack
	@echo "✓ resources.pack generado exitosamente"

# Target para forzar regeneración de resources.pack (usado por releases)
.PHONY: force_resource_pack
force_resource_pack: $(PACK_TOOL)
	@echo "Regenerando resources.pack para release..."
	$(PACK_TOOL) data resources.pack
	@echo "✓ resources.pack regenerado exitosamente"

# Reglas para compilación
windows:
	@echo Compilando para Windows con nombre: $(APP_NAME).exe
	windres release/windows/vibe3.rc -O coff -o $(RESOURCE_FILE)
	$(CXX) $(APP_SOURCES) $(RESOURCE_FILE) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o "$(WIN_TARGET_FILE).exe"
	strip -s -R .comment -R .gnu.version "$(WIN_TARGET_FILE).exe" --strip-unneeded

windows_release: force_resource_pack
	@echo "Creando release para Windows - Version: $(VERSION)"

# Crea carpeta temporal 'RELEASE_FOLDER'
	@if exist "$(RELEASE_FOLDER)" rmdir /S /Q "$(RELEASE_FOLDER)"
	@if not exist "$(DIST_DIR)" mkdir "$(DIST_DIR)"
	@mkdir "$(RELEASE_FOLDER)"

# Copia el archivo 'resources.pack'
	@copy /Y "resources.pack" "$(RELEASE_FOLDER)\" >nul

# Copia los ficheros que estan en la raíz del proyecto
	@copy /Y "LICENSE" "$(RELEASE_FOLDER)\" >nul 2>&1 || echo LICENSE not found (optional)
	@copy /Y "README.md" "$(RELEASE_FOLDER)\" >nul
	@copy /Y release\windows\dll\*.dll "$(RELEASE_FOLDER)\" >nul 2>&1 || echo DLLs copied successfully

# Compila
	@windres release/windows/vibe3.rc -O coff -o $(RESOURCE_FILE)
	@$(CXX) $(APP_SOURCES) $(RESOURCE_FILE) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o "$(WIN_RELEASE_FILE).exe"
	@strip -s -R .comment -R .gnu.version "$(WIN_RELEASE_FILE).exe" --strip-unneeded

# Crea el fichero .zip
	@if exist "$(WINDOWS_RELEASE)" del /Q "$(WINDOWS_RELEASE)"
	@powershell.exe -Command "Compress-Archive -Path '$(RELEASE_FOLDER)/*' -DestinationPath '$(WINDOWS_RELEASE)' -Force"
	@echo "Release creado: $(WINDOWS_RELEASE)"

# Elimina la carpeta temporal 'RELEASE_FOLDER'
	@rmdir /S /Q "$(RELEASE_FOLDER)"

macos:
	@echo "Compilando para macOS: $(TARGET_NAME)"
	$(CXX) $(APP_SOURCES) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o "$(TARGET_FILE)"

macos_release: force_resource_pack
	@echo "Creando release para macOS - Version: $(VERSION)"

# Verifica dependencias necesarias (create-dmg). Si falta, intenta instalarla
# con brew; si brew tampoco está, indica el comando exacto al usuario.
	@command -v create-dmg >/dev/null 2>&1 || { \
		echo ""; \
		echo "============================================"; \
		echo "  Falta la dependencia: create-dmg"; \
		echo "============================================"; \
		if command -v brew >/dev/null 2>&1; then \
			echo "  Instalando con: brew install create-dmg"; \
			brew install create-dmg || { \
				echo ""; \
				echo "  ERROR: 'brew install create-dmg' ha fallado."; \
				echo "  Ejecuta el comando manualmente y vuelve a probar."; \
				exit 1; \
			}; \
		else \
			echo "  Homebrew no está instalado."; \
			echo "  Instálalo desde https://brew.sh y luego ejecuta:"; \
			echo "      brew install create-dmg"; \
			exit 1; \
		fi; \
	}

# Elimina datos de compilaciones anteriores
	$(RMDIR) "$(RELEASE_FOLDER)"
	$(RMDIR) Frameworks
	$(RMFILE) "$(MACOS_APPLE_SILICON_RELEASE)"

# Limpia archivos temporales de create-dmg y desmonta volúmenes
	@echo "Limpiando archivos temporales y volúmenes montados..."
	@rm -f rw.*.dmg 2>/dev/null || true
	@hdiutil detach "/Volumes/$(APP_NAME)" 2>/dev/null || true
	@hdiutil detach "/Volumes/ViBe3 Physics" 2>/dev/null || true

# Crea la carpeta temporal para hacer el trabajo y las carpetas obligatorias para crear una app de macos
	$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks"
	$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS"
	$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
	$(MKDIR) Frameworks

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

# Actualiza versión en Info.plist
	@echo "Actualizando Info.plist con versión $(VERSION)..."
	@RAW_VERSION=$$(echo "$(VERSION)" | sed 's/^v//'); \
	sed -i '' '/<key>CFBundleShortVersionString<\/key>/{n;s|<string>.*</string>|<string>'"$$RAW_VERSION"'</string>|;}' "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Info.plist"; \
	sed -i '' '/<key>CFBundleVersion<\/key>/{n;s|<string>.*</string>|<string>'"$$RAW_VERSION"'</string>|;}' "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Info.plist"

# Compila la versión para procesadores Apple Silicon
	$(CXX) $(APP_SOURCES) $(INCLUDES) -DMACOS_BUNDLE -DSDL_DISABLE_IMMINTRIN_H $(CXXFLAGS) $(LDFLAGS) -o "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS/$(TARGET_NAME)" -rpath @executable_path/../Frameworks/ -target arm64-apple-macos12

# 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)"
	@if [ -f "$(MACOS_APPLE_SILICON_RELEASE)" ]; then \
		echo "✓ Release Apple Silicon creado exitosamente: $(MACOS_APPLE_SILICON_RELEASE)"; \
	else \
		echo "✗ Error: No se pudo crear el DMG Apple Silicon"; \
		exit 1; \
	fi
	@rm -f rw.*.dmg 2>/dev/null || true

# Elimina las carpetas temporales
	$(RMDIR) Frameworks
	$(RMDIR) "$(RELEASE_FOLDER)"

linux:
	@echo "Compilando para Linux: $(TARGET_NAME)"
	$(CXX) $(APP_SOURCES) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o "$(TARGET_FILE)"
	strip -s -R .comment -R .gnu.version "$(TARGET_FILE)" --strip-unneeded

linux_release: force_resource_pack
	@echo "Creando release para Linux - Version: $(VERSION)"
# Elimina carpetas previas
	$(RMDIR) "$(RELEASE_FOLDER)"

# Crea la carpeta temporal para realizar el lanzamiento
	$(MKDIR) "$(RELEASE_FOLDER)"
	$(MKDIR) "$(DIST_DIR)"

# Copia ficheros
	cp resources.pack "$(RELEASE_FOLDER)"
	cp LICENSE "$(RELEASE_FOLDER)"
	cp README.md "$(RELEASE_FOLDER)"

# Compila
	$(CXX) $(APP_SOURCES) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o "$(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)"

linux_release_desktop: force_resource_pack
	@echo "Creando release con integracion desktop para Linux - Version: $(VERSION)"
# Elimina carpetas previas
	$(RMDIR) "$(RELEASE_FOLDER)"

# Crea la carpeta de distribución y la estructura de directorios estándar para Linux
	$(MKDIR) "$(DIST_DIR)"
	$(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 resources.pack "$(RELEASE_FOLDER)/$(TARGET_NAME)/share/$(TARGET_NAME)/"
	cp LICENSE "$(RELEASE_FOLDER)/$(TARGET_NAME)/"
	cp README.md "$(RELEASE_FOLDER)/$(TARGET_NAME)/"

# Compila el ejecutable
	$(CXX) $(APP_SOURCES) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o "$(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)"

raspi:
	@echo "Compilando para Raspberry Pi: $(TARGET_NAME)"
	$(CXX) $(APP_SOURCES) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o $(TARGET_FILE)
	strip -s -R .comment -R .gnu.version $(TARGET_FILE) --strip-unneeded

raspi_release: force_resource_pack
	@echo "Creando release para Raspberry Pi - Version: $(VERSION)"
# Elimina carpetas previas
	$(RMDIR) "$(RELEASE_FOLDER)"

# Crea la carpeta temporal para realizar el lanzamiento
	$(MKDIR) "$(RELEASE_FOLDER)"
	$(MKDIR) "$(DIST_DIR)"

# Copia ficheros
	cp resources.pack "$(RELEASE_FOLDER)"
	cp LICENSE "$(RELEASE_FOLDER)"
	cp README.md "$(RELEASE_FOLDER)"

# Compila
	$(CXX) $(APP_SOURCES) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o "$(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)"

# Regla para mostrar la versión actual
show_version:
	@echo "Version actual: $(VERSION)"

# Regla de ayuda
help:
	@echo "Makefile para ViBe3 Physics"
	@echo "Comandos disponibles:"
	@echo "  windows               - Compilar para Windows"
	@echo "  windows_release       - Crear release completo para Windows (.zip)"
	@echo "  linux                 - Compilar para Linux"
	@echo "  linux_release         - Crear release basico para Linux (.tar.gz)"
	@echo "  linux_release_desktop - Crear release con integracion desktop para Linux"
	@echo "  macos                 - Compilar para macOS"
	@echo "  macos_release         - Crear release completo para macOS (.dmg)"
	@echo "  raspi                 - Compilar para Raspberry Pi"
	@echo "  raspi_release         - Crear release para Raspberry Pi (.tar.gz)"
	@echo "  pack_tool             - Compilar herramienta de empaquetado"
	@echo "  resources.pack        - Generar pack de recursos desde data/"
	@echo "  force_resource_pack   - Regenerar resources.pack (usado por releases)"
	@echo "  show_version          - Mostrar version actual ($(VERSION))"
	@echo "  help                  - Mostrar esta ayuda"

.PHONY: windows windows_release macos macos_release linux linux_release linux_release_desktop raspi raspi_release show_version help pack_tool force_resource_pack