NAME = ircserv

SRC = main.cpp Server/Server.cpp User/User.cpp \
		Channel/Channel.cpp \
		cmds/pass.cpp cmds/nick.cpp cmds/user.cpp \
		cmds/join.cpp

HEADERS = Server/Server.hpp User/User.hpp

OBJ = $(SRC:.cpp=.o)

CC = c++
CFLAGS = -Wall -Wextra -Werror -std=c++98

GREEN = \033[0;32m
RED   = \033[0;31m
RESET = \033[0m

TOTAL := $(words $(SRC))
COUNT = 0

all: $(NAME)

$(NAME): $(OBJ) $(HEADERS)
	@rm -f .build_start
	@$(CC) $(CFLAGS) $(OBJ) -o $(NAME)
	@printf "\n$(GREEN)✔ Listo (100%%)\n$(RESET)"

%.o: %.cpp
	@if [ ! -f .build_start ]; then printf "$(GREEN)Compiling objects...\n$(RESET)"; touch .build_start; fi
	@$(eval COUNT = $(shell echo $$(($(COUNT)+1))))
	@PERCENT=$$(($(COUNT)*100/$(TOTAL))); \
	BAR=$$(printf "%0.s#" $$(seq 1 $$((PERCENT/5)))); \
	SPACE=$$(printf "%0.s " $$(seq 1 $$((20-PERCENT/5)))); \
	printf "\r  [$$BAR$$SPACE] %3d%% (%d/%d) $<     " $$PERCENT $(COUNT) $(TOTAL)
	@$(CC) $(CFLAGS) -c $< -o $@

clean:
	@printf "$(RED)Removing objects...\n$(RESET)"
	@rm -f $(OBJ)

fclean: clean
	@rm -f $(NAME)

re: fclean all

.PHONY: all clean fclean re