CXX = g++
CXX_FLAGS = -Wall -std=c++14 -lpthread -s
BUILDDIR = ./build/
SRC_SERVER = ./src/server.cpp
SRC_CLIENT = ./src/client.cpp
DESTDIR = /usr/local/bin/

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

DEBVERSION = 1.0.1
ARCH = amd64
DEBPACKAGENAME = udpchat-$(DEBVERSION)-1_$(ARCH)

build:
	@if [ ! -d ${BUILDDIR} ]; then \
		mkdir ${BUILDDIR}; \
	fi
	@printf "$(GREEN)[ $(YELLOW)25%% $(GREEN)] $(RESET)CC SERVER\n"
	@$(CXX) -o $(BUILDDIR)server $(SRC_SERVER) $(CXX_FLAGS)
	@printf "$(GREEN)[ $(YELLOW)50%% $(GREEN)] $(RESET)CC CLIENT\n"
	@$(CXX) -o $(BUILDDIR)client $(SRC_CLIENT) $(CXX_FLAGS)
	@printf "$(GREEN)[ $(YELLOW)75%% $(GREEN)] $(RESET)STRIP SERVER\n"
	@strip $(BUILDDIR)server >> /dev/null
	@printf "$(GREEN)[ $(YELLOW)100%% $(GREEN)] $(RESET)STRIP CLIENT\n"
	@strip $(BUILDDIR)client >> /dev/null
	@printf "$(GREEN)BUILD SUCCESS$(RESET)\n"

clean:
	@if [ -d ${BUILDDIR} ]; then \
		rm -rv ${BUILDDIR}; \
	fi

runserver:
	@$(BUILDDIR)server 127.0.0.1 43243

runclient:
	@$(BUILDDIR)client 127.0.0.1 43243

install:
	@if [ ! -d ${DESTDIR} ]; then \
		mkdir -p $(DESTDIR); \
	fi
	@printf "$(GREEN)[ $(YELLOW)50%% $(GREEN)] $(RESET)INSTALL SERVER\n"
	@cp -rf $(BUILDDIR)server $(DESTDIR)udpchatserver
	@printf "$(GREEN)[ $(YELLOW)100%% $(GREEN)] $(RESET)INSTALL CLIENT\n"
	@cp -rf $(BUILDDIR)client $(DESTDIR)udpchatclient
	@printf "$(GREEN)INSTALL SUCCESS$(RESET)\n"

debpkg:
	@printf "$(GREEN)[ $(YELLOW)15%% $(GREEN)] $(RESET)CREATE PACKAGE DIRECTORIES\n"
	@rm -rf $(DEBPACKAGENAME)
	@mkdir -p $(DEBPACKAGENAME)/usr/local/bin
	@printf "$(GREEN)[ $(YELLOW)45%% $(GREEN)] $(RESET)COPY PACKAGE FILES\n"
	@cp -rf $(BUILDDIR)server $(DEBPACKAGENAME)/usr/local/bin/udpchatserver
	@cp -rf $(BUILDDIR)client $(DEBPACKAGENAME)/usr/local/bin/udpchatclient
	@printf "$(GREEN)[ $(YELLOW)75%% $(GREEN)] $(RESET)CREATE PACKAGE METADATA\n"
	@mkdir $(DEBPACKAGENAME)/DEBIAN
	@touch $(DEBPACKAGENAME)/DEBIAN/control
	@printf "$(GREEN)[ $(YELLOW)100%% $(GREEN)] $(RESET)CREATE PACKAGE\n"
	@printf "Package: udpchat\nVersion: 1.0.1\nArchitecture: $(ARCH)\nMaintainer: Tola Mironcenko <mironcenkotola@gmail.com>\nDescription: This is small chat in terminal\n" >> $(DEBPACKAGENAME)/DEBIAN/control
	@dpkg-deb --build --root-owner-group $(DEBPACKAGENAME)
	@printf "$(GREEN)BUILDING DEBIAN PACKAGE SUCCESS$(RESET)\n"

archlinuxpkg:
	@makepkg -f

all:
	@make build
	@make debpkg
	@make archlinuxpkg
