# Директории
SRC_DIR = src
IMG_DIR = img
LATEX_DIR = latex
BUILD_DIR = build
TEMPLATE_DIR = templates
TARGET = document.pdf
BIB_FILE = refs.bib

# Находим все .md файлы рекурсивно
MD_FILES := $(shell find $(SRC_DIR) -name "*.md")

# Разделяем файлы на особые и обычные
DRAFT_FILES := $(shell find $(SRC_DIR) -name "*_draft.md")
TARGET_FILES := $(shell find $(SRC_DIR) -name "*_target.md")
SPECIAL_FILES := $(DRAFT_FILES) $(TARGET_FILES)
REGULAR_FILES := $(filter-out $(SPECIAL_FILES),$(MD_FILES))

# Преобразуем пути к .tex файлам
REGULAR_TEX_FILES := $(patsubst $(SRC_DIR)/%.md,$(LATEX_DIR)/%.tex,$(REGULAR_FILES))
DRAFT_TEX_FILES := $(patsubst $(SRC_DIR)/%_draft.md,$(LATEX_DIR)/%_draft.tex,$(DRAFT_FILES))
TARGET_TEX_FILES := $(patsubst $(SRC_DIR)/%_target.md,$(LATEX_DIR)/%_target.tex,$(TARGET_FILES))

TEX_FILES := $(REGULAR_TEX_FILES) $(DRAFT_TEX_FILES) $(TARGET_TEX_FILES)

DRAFT_PDF_FILES := $(patsubst $(SRC_DIR)/%_draft.md,$(LATEX_DIR)/%_draft.pdf,$(DRAFT_FILES))
TARGET_PDF_FILES := $(patsubst $(SRC_DIR)/%_target.md,$(LATEX_DIR)/%_target.pdf,$(TARGET_FILES))
PDF_FILES := $(DRAFT_PDF_FILES) $(TARGET_PDF_FILES)

BIB_SRC = $(wildcard ./*.bib)
IMG_SRC = $(wildcard $(IMG_DIR)/*.png $(IMG_DIR)/*.jpg)
DRAFT_TEMPLATE = draft_template.tex
TARGET_TEMPLATE = target_template.tex


PANDOC = pandoc
PANDOC_FLAGS = -f markdown -t latex --metadata-file=config.yaml --top-level-division=chapter --citeproc

# Компилятор LaTeX
LATEX = lualatex
BIBTEX = biber

GLOSSARY = makeglossaries

# Флаги компиляции
LATEX_FLAGS = -interaction=nonstopmode --shell-escape -halt-on-error

TEXINPUTS = .:$(LATEX_DIR):

# Функция для получения даты
get_date = $(shell date +%d-%m-%Y)
DATE = $(call get_date)

TARGET = rea.pdf
# Основная цель
all: tex pdf

# Компиляция special tex файлов в PDF
pdf: $(PDF_FILES)

# Создание всех tex файлов
tex: $(TEX_FILES)

# Правило для конвертации .md в .tex
$(LATEX_DIR)/%.tex: $(SRC_DIR)/%.md
	@echo "create pdf: $@"
	@mkdir -p $(dir $@)
	$(PANDOC) $(PANDOC_FLAGS) $< -o $@

# Особое правило для *_draft.md файлов
$(LATEX_DIR)/%_draft.tex: $(SRC_DIR)/%_draft.md
	@mkdir -p $(dir $@)
	@echo "Converting DRAFT file with special processing: $< -> $@"
	$(PANDOC) $(PANDOC_FLAGS) --template=$(TEMPLATE_DIR)/$(DRAFT_TEMPLATE) $< -o $@

# Особое правило для *_target.md файлов  
$(LATEX_DIR)/%_target.tex: $(SRC_DIR)/%_target.md
	@mkdir -p $(dir $@)
	@echo "Converting TARGET file with special processing: $< -> $@"
	$(PANDOC) $(PANDOC_FLAGS) --template=$(TEMPLATE_DIR)/$(TARGET_TEMPLATE) $< -o $@


# Правило для компиляции LaTeX в PDF для draft файлов
$(LATEX_DIR)/%_draft.pdf: $(LATEX_DIR)/%_draft.tex $(TEX_FILES)
	mkdir -p $(BUILD_DIR)
	@echo "Compiling LaTeX: $< -> $@"
	cd $(dir $<) && $(LATEX) $(LATEX_FLAGS) $(notdir $<)
	cp $@ build/$(basename $(notdir $@))_$(DATE).pdf

# Правило для компиляции LaTeX в PDF для target файлов
$(LATEX_DIR)/%_target.pdf: $(LATEX_DIR)/%_target.tex $(TEX_FILES)
	mkdir -p $(BUILD_DIR)
	cp  $(BIB_FILE) $(dir $<)
	@echo "Compiling LaTeX: $< -> $@"
	# Запускаем 1-й раз
	cd $(dir $<) && TEXINPUTS=$(TEXINPUTS) $(LATEX) $(LATEX_FLAGS) $(notdir $<)
	# проверка цитат
	cd $(dir $<) && $(BIBTEX) $(basename $(notdir $<))
	# Создание глосария
	cd $(dir $<) && $(GLOSSARY) $(basename $(notdir $<))
	# Запускаем 2-й раз
	cd $(dir $<) && TEXINPUTS=$(TEXINPUTS) $(LATEX) $(LATEX_FLAGS) $(notdir $<)
	# Запускаем 3-й раз
	cd $(dir $<) && TEXINPUTS=$(TEXINPUTS) $(LATEX) $(LATEX_FLAGS) $(notdir $<)
	cp $@ build/$(basename $(notdir $@))_$(DATE).pdf

# Очистка
clean:
	rm -rf $(BUILD_DIR)
	rm -rf $(LATEX_DIR)

# Показать найденные файлы
list:
	@echo "MD files found:"
	@echo $(MD_FILES)
	@echo "TEX files to generate:"
	@echo $(TEX_FILES)
	@echo "PDF files to generate:"
	@echo $(PDF_FILES)

.PHONY: all clean list
