set(BANK_WEBSITE_URL ${BANK_WEBSITE_HOST}${BANK_WEBSITE_PATH})
set(NL_RAW_DATA_PATH "${BANKDATA_SRCPATH}/nl_data.xlsx")
set(CH_RAW_DATA_PATH "${BANKDATA_SRCPATH}/ch_data.txt")
set(TEMP_FILE "${CMAKE_CURRENT_BINARY_DIR}/tmpfile.txt")
set(SEARCH_FILENAME blz-.*-txt-data.txt)
set(SEARCH_CH_FILENAME bankenstamm)

# generate cmake script for downloading bank data file
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/de_data.cmake "
    file(DOWNLOAD \"${BANK_WEBSITE_URL}\" \"${TEMP_FILE}\")
    file(READ \"${TEMP_FILE}\" DATA)
    #message(\"\${DATA}\")
    string(REGEX REPLACE \".*href=\\\"(.*/${SEARCH_FILENAME})\\\".*\" \"${BANK_WEBSITE_HOST}\\\\1\" FILE_URL  \"\${DATA}\")
    message(\"got file url \${FILE_URL}\")
    file(DOWNLOAD \"\${FILE_URL}\" \"${BANKDATA_RAW_FILEPATH}\")
")

file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/nl_data.cmake "
    file(DOWNLOAD \"${NL_BANK_WEBSITE_URL}\" \"${NL_RAW_DATA_PATH}\")
")

file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/ch_data.cmake "
    file(DOWNLOAD \"${CH_RAW_DATA_URL}\" \"${CH_RAW_DATA_PATH}\")
")

# fetch validity date from bank's website
function(extract_date ARG)
    file(DOWNLOAD ${BANK_WEBSITE_URL} ${TEMP_FILE})
    file(READ ${TEMP_FILE} DATA)

    string(REGEX MATCH "gültig vom ([^ ]*) bis" FILE_DATE  "${DATA}")
    string(REGEX MATCH "([0-9.]+)" FILE_DATE "${FILE_DATE}")

    message(STATUS "Got valid date: '${FILE_DATE}'")
    set(${ARG} ${FILE_DATE} PARENT_SCOPE)

endfunction()

# fetch raw bankdata file
add_custom_command(
    OUTPUT ${BANKDATA_RAW_FILEPATH}
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/de_data.cmake
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMENT "Download raw bank data file to ${BANKDATA_RAW_FILEPATH}"
)

add_custom_command(
    OUTPUT ${NL_RAW_DATA_PATH}
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/nl_data.cmake
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMENT "Download raw bank data file to ${NL_RAW_DATA_PATH}"
)

add_custom_command(
    OUTPUT ${CH_RAW_DATA_PATH}
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/ch_data.cmake
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMENT "Download raw bank data file to ${CH_RAW_DATA_PATH}"
)

# store the validity date in VALID_DATE
set(VALID_DATE "")
extract_date(VALID_DATE)

if(NOT "${VALID_DATE}" STREQUAL "")
add_custom_command(
    OUTPUT  ${BANKDATA_DBPATH}
    COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/update-database.py -o ${BANKDATA_DBPATH} ${BANKDATA_RAW_FILEPATH} ${VALID_DATE}
    DEPENDS ${BANKDATA_RAW_FILEPATH}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
endif()

add_custom_command(
    OUTPUT  ${BANKDATA_NL_DBPATH}
    COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/netherlands.py -o ${BANKDATA_NL_DBPATH} ${NL_RAW_DATA_PATH}
    DEPENDS ${NL_RAW_DATA_PATH}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)

add_custom_command(
    OUTPUT  ${BANKDATA_CH_DBPATH}
    COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/switzerland.py -o ${BANKDATA_CH_DBPATH} ${CH_RAW_DATA_PATH}
    DEPENDS ${CH_RAW_DATA_PATH}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)

add_custom_command(
    OUTPUT  ${BANKDATA_TEST_DBPATH}
    COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/update-database.py -o ${BANKDATA_TEST_DBPATH} -t ${BANKDATA_TEST_FILEPATH} 2022-01-01
    DEPENDS ${BANKDATA_TEST_FILEPATH}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)

add_custom_target(fetch_bankdata
    DEPENDS ${BANKDATA_RAW_FILENAME}
)

add_custom_target(bankdata_de
    DEPENDS ${BANKDATA_FILEPATH}
)

add_custom_target(bankdata_db
    DEPENDS ${BANKDATA_DBPATH}
)

add_custom_target(bankdata_nl_db
    DEPENDS ${BANKDATA_NL_DBPATH}
)

add_custom_target(bankdata_ch_db
    DEPENDS ${BANKDATA_CH_DBPATH}
)

add_custom_target(bankdata_test_db
    DEPENDS ${BANKDATA_TEST_DBPATH}
)

add_subdirectory(sepa)

set(INSTALL_FILES
    ${BANKDATA_FILEPATH} # to be removed
    ${BANKDATA_DBPATH}
    ${BANKDATA_NL_DBPATH}
    ${BANKDATA_CH_DBPATH}
    ibandata.txt
)

if(INSTALL_RAW_BANKDATA_FILE)
    list(APPEND INSTALL_FILES ${BANKDATA_RAW_FILEPATH})
endif()

install(FILES ${INSTALL_FILES} DESTINATION share/${PROJECT_NAME})
