# ───────────────────────────────────────────────────────────────────────────
# Yali-RS — PisiLinux Kurulum Aracı
# Makefile  (GNU Make 4.x)
# ───────────────────────────────────────────────────────────────────────────

BINARY      := yali-rs
VERSION     := 4.0.1

# Kurulum yolları (DESTDIR ile paket yöneticisi uyumlu)
PREFIX      ?= /usr
BINDIR      ?= $(PREFIX)/bin
DATADIR     ?= $(PREFIX)/share/yali
LOCALEDIR   ?= $(DATADIR)/locales
ASSETSDIR   ?= $(DATADIR)/assets
DESKTOPDIR  ?= $(PREFIX)/share/applications
PIXMAPDIR   ?= $(PREFIX)/share/pixmaps

# Cargo hedefleri
RELEASE_BIN := target/release/$(BINARY)
DEBUG_BIN   := target/debug/$(BINARY)

# Renk çıktısı (terminal destekliyorsa)
BOLD   := $(shell tput bold 2>/dev/null)
GREEN  := $(shell tput setaf 2 2>/dev/null)
YELLOW := $(shell tput setaf 3 2>/dev/null)
RESET  := $(shell tput sgr0 2>/dev/null)

.PHONY: all build release debug run demo auto check fmt lint test \
        install uninstall clean distclean help

# ── Varsayılan hedef ────────────────────────────────────────────────────────
all: release

# ── Derleme ─────────────────────────────────────────────────────────────────

## Üretim ikili dosyasını derle (release modu, LTO etkin)
release:
	@echo "$(BOLD)$(GREEN)▶ Derleniyor: release$(RESET)"
	cargo build --release

## Geliştirme ikili dosyasını derle (debug modu, hızlı derleme)
debug:
	@echo "$(BOLD)$(YELLOW)▶ Derleniyor: debug$(RESET)"
	cargo build

## 'build' takma adı → debug derleme
build: debug

# ── Çalıştırma ───────────────────────────────────────────────────────────────

## Grafik arayüzü başlat (release)
run: release
	@echo "$(BOLD)$(GREEN)▶ Başlatılıyor: GUI modu$(RESET)"
	./$(RELEASE_BIN)

## Grafik arayüzü debug modda başlat
run-debug: debug
	./$(DEBUG_BIN)

## Demo modu: gerçek komutlar çalıştırılmaz; UI akışını test etmek için kullanılır.
## Kurulum ekranında slaytlar arasında 5 sn beklenir.
demo: release
	@echo "$(BOLD)$(GREEN)▶ Başlatılıyor: Demo modu (--demo)$(RESET)"
	./$(RELEASE_BIN) --demo

## Demo modu (debug derlemesiyle — daha hızlı başlar, geliştirme için)
demo-debug: debug
	./$(DEBUG_BIN) --demo

## Otomatik kurulum modu: answer-example.toml kullanılır (DİKKAT: gerçek disk!)
auto: release
	@echo "$(BOLD)$(YELLOW)▶ Başlatılıyor: Otomatik kurulum modu$(RESET)"
	@echo "$(YELLOW)UYARI: answer-example.toml içindeki diski kontrol edin!$(RESET)"
	./$(RELEASE_BIN) --auto-install answer-example.toml

## Otomatik kurulum — yalnızca demo; gerçek komutlar çalışmaz
auto-demo: release
	./$(RELEASE_BIN) --auto-install answer-example.toml --demo

# ── Kalite Kontrol ───────────────────────────────────────────────────────────

## Kod derleme kontrolü (ikili üretmez)
check:
	@echo "$(BOLD)▶ Kontrol ediliyor$(RESET)"
	cargo check

## Kod formatlama (yerinde düzenler)
fmt:
	@echo "$(BOLD)▶ Formatlanıyor$(RESET)"
	cargo fmt --all

## Formatlama kontrolü (CI için; değişiklik yapılmaz)
fmt-check:
	cargo fmt --all -- --check

## Clippy lint (uyarıları hata say)
lint:
	@echo "$(BOLD)▶ Lint: clippy$(RESET)"
	cargo clippy -- -D warnings

## Birim testler
test:
	@echo "$(BOLD)▶ Testler çalıştırılıyor$(RESET)"
	cargo test

## Tam CI kontrolü: fmt-check + clippy + test
ci: fmt-check lint test
	@echo "$(BOLD)$(GREEN)✓ CI geçti$(RESET)"

# ── Kurulum ──────────────────────────────────────────────────────────────────

## Sisteme kur (sudo gerekebilir; DESTDIR ile paket kurulumu desteklenir)
install: release
	@echo "$(BOLD)$(GREEN)▶ Kuruluyor: $(DESTDIR)$(BINDIR)/$(BINARY)$(RESET)"

	# İkili dosya
	install -Dm755 $(RELEASE_BIN) $(DESTDIR)$(BINDIR)/$(BINARY)

	# Varlıklar (görüntüler, SVG'ler)
	install -dm755 $(DESTDIR)$(ASSETSDIR)
	cp -r assets/* $(DESTDIR)$(ASSETSDIR)/

	# Görsel özelleştirme (branding) dosyaları
	install -dm755 $(DESTDIR)$(DATADIR)
	install -m644 branding*.toml $(DESTDIR)$(DATADIR)/

	# Dil dosyaları
	install -dm755 $(DESTDIR)$(LOCALEDIR)
	install -m644 locales/*.toml $(DESTDIR)$(LOCALEDIR)/

	# .desktop girdisi
	install -Dm644 assets/yali.desktop $(DESTDIR)$(DESKTOPDIR)/yali.desktop

	# Logo (pixmap)
	install -Dm644 assets/yali.png $(DESTDIR)$(PIXMAPDIR)/yali.png

	@echo "$(BOLD)$(GREEN)✓ Kurulum tamamlandı$(RESET)"

## Sistemden kaldır
uninstall:
	@echo "$(BOLD)$(YELLOW)▶ Kaldırılıyor$(RESET)"
	rm -f  $(DESTDIR)$(BINDIR)/$(BINARY)
	rm -rf $(DESTDIR)$(DATADIR)
	rm -f  $(DESTDIR)$(DESKTOPDIR)/yali.desktop
	rm -f  $(DESTDIR)$(PIXMAPDIR)/yali.png
	@echo "$(BOLD)$(GREEN)✓ Kaldırıldı$(RESET)"

# ── Temizlik ─────────────────────────────────────────────────────────────────

## Derleme çıktılarını temizle (Cargo önbelleği korunur)
clean:
	cargo clean

## Derin temizlik: derleme çıktıları + Cargo registry önbelleği
distclean: clean
	rm -rf ~/.cargo/registry/cache

# ── Paketleme ────────────────────────────────────────────────────────────────

## Kaynak arşivi oluştur (git archive veya tar)
dist:
	@echo "$(BOLD)▶ Arşiv oluşturuluyor: $(BINARY)-$(VERSION).tar.gz$(RESET)"
	@if git rev-parse --git-dir > /dev/null 2>&1; then \
		git archive --format=tar.gz --prefix=$(BINARY)-$(VERSION)/ HEAD \
			-o $(BINARY)-$(VERSION).tar.gz; \
	else \
		tar -czf $(BINARY)-$(VERSION).tar.gz \
			--transform 's|^|$(BINARY)-$(VERSION)/|' \
			--exclude='.git' --exclude='target' \
			.; \
	fi
	@echo "✓ $(BINARY)-$(VERSION).tar.gz"

## Sürüm bilgisini yazdır
version:
	@echo "$(BINARY) $(VERSION)"
	@cargo --version
	@rustc --version

# ── Yardım ───────────────────────────────────────────────────────────────────

## Bu yardım metnini göster
help:
	@echo ""
	@echo "$(BOLD)Yali-RS $(VERSION) — PisiLinux Kurulum Aracı$(RESET)"
	@echo ""
	@echo "$(BOLD)Derleme:$(RESET)"
	@echo "  make release       Üretim ikili dosyasını derle (varsayılan)"
	@echo "  make debug         Debug modda derle"
	@echo "  make check         Derleme kontrolü (ikili üretmez)"
	@echo ""
	@echo "$(BOLD)Çalıştırma:$(RESET)"
	@echo "  make run           GUI başlat (release)"
	@echo "  make demo          Demo modu — gerçek komutlar çalışmaz"
	@echo "  make demo-debug    Demo modu — debug derlemesiyle"
	@echo "  make auto          Otomatik kurulum (answer-example.toml)"
	@echo "  make auto-demo     Otomatik kurulum demo modu"
	@echo ""
	@echo "$(BOLD)Kalite Kontrol:$(RESET)"
	@echo "  make fmt           Kodu formatla"
	@echo "  make fmt-check     Formatlama kontrolü (CI)"
	@echo "  make lint          Clippy lint"
	@echo "  make test          Testleri çalıştır"
	@echo "  make ci            Tam CI: fmt-check + lint + test"
	@echo ""
	@echo "$(BOLD)Kurulum:$(RESET)"
	@echo "  make install       Sisteme kur (DESTDIR destekler)"
	@echo "  make uninstall     Sistemden kaldır"
	@echo ""
	@echo "$(BOLD)Paketleme:$(RESET)"
	@echo "  make dist          Kaynak arşivi oluştur"
	@echo "  make version       Sürüm bilgisini göster"
	@echo ""
	@echo "$(BOLD)Örnekler:$(RESET)"
	@echo "  make install DESTDIR=/tmp/pkg PREFIX=/usr"
	@echo "  make auto    # answer-example.toml diskini kontrol edin!"
	@echo ""
