CFLAGS = $(shell pkg-config --cflags gtk+-2.0 gio-2.0) -Wall -Wextra -g -std=c99
LDFLAGS = $(shell pkg-config --libs gtk+-2.0 gio-2.0) -ldl -lm -Wl,--as-needed -Wl,-rpath,./lib

SRC_DIR = src
SRCS = $(SRC_DIR)/main.c \
       $(SRC_DIR)/player.c \
       $(SRC_DIR)/ui.c \
       $(SRC_DIR)/controls.c \
       $(SRC_DIR)/playlist.c \
       $(SRC_DIR)/dialogs.c \
       $(SRC_DIR)/mpv_loader.c \
       $(SRC_DIR)/mpris.c

OBJS = $(SRCS:.c=.o)
TARGET = gtk2-mpv-player

# Find libmpv path dynamically
LDCONFIG = $(shell command -v ldconfig || command -v /sbin/ldconfig || command -v /usr/sbin/ldconfig)
LIBMPV_PATH = $(if $(LDCONFIG),$(shell $(LDCONFIG) -p | grep libmpv.so.2 | head -n 1 | awk '{print $$NF}'))

.PHONY: all clean run bundle check install uninstall

all: $(TARGET) bundle

release: CFLAGS += -O2 -DNDEBUG
release: LDFLAGS += -s
release: clean all

$(TARGET): $(OBJS)
	$(CC) -o $@ $^ $(LDFLAGS)

bundle:
	mkdir -p lib
	@if [ -n "$(LIBMPV_PATH)" ]; then \
		echo "Bundling libmpv from $(LIBMPV_PATH)"; \
		cp "$(LIBMPV_PATH)" lib/libmpv.so.2; \
	else \
		echo "Warning: libmpv.so.2 not found, skipping bundling."; \
	fi

check:
	./tools/check_dependencies.sh

$(SRC_DIR)/%.o: $(SRC_DIR)/%.c
	$(CC) $(CFLAGS) -c -o $@ $<

clean:
	rm -f $(OBJS) $(TARGET)
	rm -rf lib/

install: all
	sudo ./install.sh

uninstall:
	sudo rm -rf /usr/local/lib/gtk2-mpv-player
	sudo rm -f /usr/local/bin/gtk2-mpv-player
	sudo rm -f /usr/share/applications/gtk2-mpv-player.desktop
	update-desktop-database

run: $(TARGET)
	./$(TARGET)

# Dependencies
$(SRC_DIR)/main.o: $(SRC_DIR)/main.c $(SRC_DIR)/ui.h $(SRC_DIR)/player.h
$(SRC_DIR)/player.o: $(SRC_DIR)/player.c $(SRC_DIR)/player.h
$(SRC_DIR)/ui.o: $(SRC_DIR)/ui.c $(SRC_DIR)/ui.h $(SRC_DIR)/player.h $(SRC_DIR)/controls.h $(SRC_DIR)/playlist.h $(SRC_DIR)/dialogs.h
$(SRC_DIR)/controls.o: $(SRC_DIR)/controls.c $(SRC_DIR)/controls.h $(SRC_DIR)/player.h
$(SRC_DIR)/playlist.o: $(SRC_DIR)/playlist.c $(SRC_DIR)/playlist.h $(SRC_DIR)/player.h
$(SRC_DIR)/dialogs.o: $(SRC_DIR)/dialogs.c $(SRC_DIR)/dialogs.h $(SRC_DIR)/player.h $(SRC_DIR)/playlist.h
$(SRC_DIR)/mpv_loader.o: $(SRC_DIR)/mpv_loader.c $(SRC_DIR)/mpv_loader.h
