.PHONY: help run clean test all stddev doc pack pack-short

LOGINS = xhazafi00_xkvapio00_xlalikj00

ROOT_DIR = ..
INSTALL_DIR = $(ROOT_DIR)/install
DOC_DIR = $(ROOT_DIR)/doc
DATE = $(shell date '+%d.%m.%Y %H:%M:%S')

PY_FILES = $(shell find . -maxdepth 1 -name "stddev" -o -name "*.py")
ENTRY_POINT = $(shell grep -l "__main__" $(PY_FILES) 2>/dev/null | head -n 1)

all:
	@echo "Installing dependencies."
	@sudo apt update
	@sudo apt install -y python3-pip python3-pyqt6 python3-pytest zip doxygen
	@pip3 install -r requirements.txt --break-system-packages
	@chmod +x stddev
	@echo "All dependencies installed."

help:
	@echo "--- Turbo Delphi Haters ---"
	@echo "Main executable file: $(ENTRY_POINT)"
	@echo "Available commands:"
	@echo "make all - Install dependencies"
	@echo "make run - Launch the calculator app"
	@echo "make test - Run unit tests for mathematical library"
	@echo "make stddev - Run stddev.py with sample input"
	@echo "make doc - Generate documentation"
	@echo "make clean - Remove temporary files" 
	@echo "make help - Display help message"
	@echo "make pack - Pack for submission at ivs.fit.vutbr.cz"
	@echo "make pack-short - Pack for submission at IS VUT"
	
run:
	@python3 $(ENTRY_POINT)

test:
	@echo "Running mathematical tests..."
	@python3 -m pytest .
	@echo "Tests completed."

stddev:
	@echo "Running stddev with sample input"
	@chmod +x stddev
	@echo "1 23 3 4 5.0001 0.01" | ./stddev

doc: $(filter-out %stddev, $(PY_FILES))
	@echo "Generating documentation..."
	@doxygen Doxyfile
	@echo "Done."

pack-short: clean
	@echo "Creating package for IS VUT..."
	@rm -rf $(ROOT_DIR)/$(LOGINS)/repo
	@mkdir -p $(ROOT_DIR)/$(LOGINS)/repo/src
	
	@cp -r . $(ROOT_DIR)/$(LOGINS)/repo/src/
	@find $(ROOT_DIR)/repo -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true

	@cp $(ROOT_DIR)/hodnoceni.txt $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || echo "Missing hodnoceni.txt"
	@cp $(ROOT_DIR)/manual.pdf $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || echo "Missing manual.pdf"
	@cp $(ROOT_DIR)/skutecnost.txt $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || echo "Missing skutecnost.txt"

	@echo "Datum a čas odevzdání: $(DATE)" > $(ROOT_DIR)/$(LOGINS)/repo/odevzdani.txt
	@echo "Způsob odevzdání: Kompletní archiv nahrán na server ivs.fit.vutbr.cz do adresáře /ivs-proj2/odevzdane/xhazafi00" >> $(ROOT_DIR)/$(LOGINS)/repo/odevzdani.txt
	@echo "Obsah kompletního archivu: repo, doc, install" >> $(ROOT_DIR)/$(LOGINS)/repo/odevzdani.txt
	@echo "Kompletní archiv obsahuje navíc v adresáří repo: mockup, plan, profiling, LICENSE, README.txt, debugging.png, screenshot.png, .gitignore, .gitattributes, .editorconfig, .git" >> $(ROOT_DIR)/$(LOGINS)/repo/odevzdani.txt

	@cd $(ROOT_DIR) && zip -r $(LOGINS)-short.zip $(LOGINS) > /dev/null
	@rm -rf $(ROOT_DIR)/$(LOGINS)
	@echo "Done: $(ROOT_DIR)/$(LOGINS)-short.zip"

pack: clean doc
	@echo "Creating full package for submission..."
	@rm -rf $(ROOT_DIR)/$(LOGINS)
	@mkdir -p $(ROOT_DIR)/$(LOGINS)/doc $(ROOT_DIR)/$(LOGINS)/install $(ROOT_DIR)/$(LOGINS)/repo
	
	@cp -r $(DOC_DIR)/* $(ROOT_DIR)/$(LOGINS)/doc/ 2>/dev/null || true
	
	@mkdir -p $(INSTALL_DIR)/src
	@cp -r . $(INSTALL_DIR)/src/
	@find $(INSTALL_DIR)/src -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true

	@chmod +x $(INSTALL_DIR)/*.sh 2>/dev/null || true
	@cd $(INSTALL_DIR) && zip -r ../$(LOGINS)/install/tdh-calculator.zip install.sh uninstall.sh src/ > /dev/null
	@cd $(INSTALL_DIR) && zip -r ../$(LOGINS)/install/tdh-stddev.zip install_stddev.sh uninstall_stddev.sh src/ > /dev/null
	@rm -rf $(INSTALL_DIR)/src
	
	@mkdir -p $(ROOT_DIR)/$(LOGINS)/repo/src
	@cp -r . $(ROOT_DIR)/$(LOGINS)/repo/src/
	@cp -r $(ROOT_DIR)/install $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || true
	@cp -r $(ROOT_DIR)/mockup $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || true
	@cp -r $(ROOT_DIR)/plan $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || true
	@cp -r $(ROOT_DIR)/profiling $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || true
	@cp -r $(ROOT_DIR)/.git $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || true

	@cp $(ROOT_DIR)/LICENSE $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || true
	@cp $(ROOT_DIR)/README.txt $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || true
	@cp $(ROOT_DIR)/skutecnost.txt $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || true
	@cp $(ROOT_DIR)/hodnoceni.txt $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || true
	@cp $(ROOT_DIR)/.gitignore $(ROOT_DIR)/.gitattributes $(ROOT_DIR)/.editorconfig $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || true
	@cp -r $(ROOT_DIR)/.git $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || true
	
	@cp $(ROOT_DIR)/*.pdf $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || true
	@cp $(ROOT_DIR)/*.jpg $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || true
	@cp $(ROOT_DIR)/*.png $(ROOT_DIR)/$(LOGINS)/repo/ 2>/dev/null || true

	@find $(ROOT_DIR)/$(LOGINS) -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true

	@cd $(ROOT_DIR) && zip -r $(LOGINS).zip $(LOGINS) > /dev/null
	@rm -rf $(ROOT_DIR)/$(LOGINS)

	@find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true

	@echo "Done: $(LOGINS).zip"

clean:
	@echo "Cleaning up temporary files..."
	@find $(ROOT_DIR) -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
	@rm -rf .pytest_cache
	@rm -f $(ROOT_DIR)/*.zip $(INSTALL_DIR)/*.zip
	@rm -rf $(DOC_DIR) $(ROOT_DIR)/$(LOGINS) $(ROOT_DIR)/$(LOGINS)-short
	@echo "Done."