# Makefile for project replication_ignaszak_sedlacek_customer

# Directories
SRC_DIR := src/data_analysis
MODEL_DIR := src/model
BLD_DATA_DIR := bld/data
BLD_TAB_DIR := bld/tables

# Scripts
GET_COMPUSTAT := $(SRC_DIR)/get_compustat.py
PREPARE_COMPUSTAT := $(SRC_DIR)/prepare-compustat-data.R
PREPARE_CAPITALIQ := $(SRC_DIR)/prepare-capitalIQ-data.R
PREPARE_AGGREGATE_DATA := $(SRC_DIR)/prepare-aggregate-data.R
MERGE_DATA := $(SRC_DIR)/merge-compustat-and-capitalIQ.R
CALIBRATION_MOMENTS := $(SRC_DIR)/calibration_moments_compustat_and_capitaliq.R
VALIDATION := $(SRC_DIR)/empirical_validation.R
LIBRARY := $(SRC_DIR)/library.R

# Data Outputs
COMPUSTAT_PARQUET := $(BLD_DATA_DIR)/compustat_data.parquet
COMPUSTAT_FEATHER := $(BLD_DATA_DIR)/compustat.feather
CAPITALIQ_FEATHER := $(BLD_DATA_DIR)/capitalIQ.feather
COMBINED_FEATHER := $(BLD_DATA_DIR)/compustat_IQ_combined.feather
AGGREGATE_DATA1 := $(BLD_DATA_DIR)/bds2023_fz.csv
AGGREGATE_DATA2 := $(BLD_DATA_DIR)/bds2023_fa_fz.csv
COMPUSTAT_WEIGHTS := $(BLD_DATA_DIR)/compustat_size_weights.csv
BDS_LIFECYCLE := $(BLD_DATA_DIR)/bds_lifecycle.csv

# Table Outputs
TABLE1 := $(BLD_TAB_DIR)/Table_1.tex
TABLE_VALID := $(BLD_TAB_DIR)/Table_7.tex

# Model Outputs (representative)
MODEL_CHECKPOINT := $(MODEL_DIR)/par_baseline.mat

.PHONY: all clean data model

all: data model

data: $(COMBINED_FEATHER) $(TABLE1) $(TABLE_VALID)

model: $(MODEL_CHECKPOINT)

# Running get_compustat.py
$(COMPUSTAT_PARQUET): $(GET_COMPUSTAT)
	@echo "Downloading compustat data from the WRDS..."
	python3 $(GET_COMPUSTAT)

# Running prepare-compustat-data.R
$(COMPUSTAT_FEATHER): $(PREPARE_COMPUSTAT) $(COMPUSTAT_PARQUET) $(LIBRARY)
	@echo "Cleaning compustat data..."
	Rscript -e "source('$(LIBRARY)'); source('$(PREPARE_COMPUSTAT)')"

# Run prepare-capitalIQ-data.R
$(CAPITALIQ_FEATHER): $(PREPARE_CAPITALIQ) $(LIBRARY) $(COMPUSTAT_PARQUET)
	@echo "Cleaning capitalIQ data..."
	Rscript -e "source('$(LIBRARY)'); source('$(PREPARE_CAPITALIQ)')"

# Prepare aggregate data 
$(AGGREGATE_DATA1) $(AGGREGATE_DATA2) $(BDS_LIFECYCLE) &: $(PREPARE_AGGREGATE_DATA) $(LIBRARY)
	@echo "Getting BDS data..."
	Rscript -e "source('$(LIBRARY)'); source('$(PREPARE_AGGREGATE_DATA)')"

# Merge compustat and capitalIQ data
$(COMBINED_FEATHER): $(COMPUSTAT_FEATHER) $(CAPITALIQ_FEATHER) $(LIBRARY)
	@echo "Merging Compustat and CapitalIQ data..."
	Rscript -e "source('$(LIBRARY)');source('$(MERGE_DATA)')"

# Run calibration_moments_compustat_and_capitaliq.R
$(TABLE1) $(COMPUSTAT_WEIGHTS) &: $(COMBINED_FEATHER) $(AGGREGATE_DATA1) $(LIBRARY) $(CALIBRATION_MOMENTS) $(SRC_DIR)/library_compustat_calibration.R
	@echo "Generating calibration moments..."
	Rscript -e "source('$(CALIBRATION_MOMENTS)')"

# Run empirical_validation.R
$(TABLE_VALID): $(COMBINED_FEATHER) $(AGGREGATE_DATA1) $(LIBRARY) $(VALIDATION)
	@echo "Running model validation ..."
	Rscript -e "source('$(VALIDATION)')"

# Model execution
$(MODEL_CHECKPOINT): $(COMPUSTAT_WEIGHTS) $(BDS_LIFECYCLE)
	@echo "Running the model..."
	$(MAKE) -C $(MODEL_DIR)

clean:
	@echo "Cleaning bld/ directory..."
	rm -rf $(BLD_DATA_DIR)/*
	rm -rf $(BLD_TAB_DIR)/*
	rm -rf $./bld/figures/*
