if (NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/smtk-tools/README.md")
    message("To enable end-to-end tests, fetch git submodules")
    return()
elseif (NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/cmb-target-problems/prob1/readme.txt")
    message("To enable end-to-end tests, fetch git submodules")
    return()
endif()

message("Enabling end-to-end tests")


set(smtk_pythonpath ${smtk_DIR}/${SMTK_PYTHONPATH})
if(NOT IS_ABSOLUTE ${smtk_pythonpath})
  get_filename_component(smtk_pythonpath
    ${PROJECT_BINARY_DIR}/${smtk_DIR}/${SMTK_PYTHON_MODULEDIR} ABSOLUTE)
endif()

set(pyenv
  ${PROJECT_BINARY_DIR}
  ${smtk_pythonpath}
  $ENV{PYTHONPATH})
if (WIN32)
  string(REPLACE ";" "\;" pyenv "${pyenv}")
else ()
  string(REPLACE ";" ":" pyenv "${pyenv}")
endif()

set(pathenv)
if (WIN32)
  set(pathenv
    ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
    $ENV{PATH})
  string(REPLACE ";" "\;" pathenv "${pathenv}")
endif()

# Function to set test properties
function (config_test test_name)
  set_tests_properties("${test_name}"
    PROPERTIES
      ENVIRONMENT "PYTHONPATH=${pyenv}"
      LABELS "TruchasEndToEnd"
  )
  if (pathenv)
    set_property(TEST "${test_name}" APPEND
      PROPERTY
        ENVIRONMENT "PATH=${pathenv}"
    )
  endif ()
endfunction()

# Create directory for test files
set(e2e_dir "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end")
file(MAKE_DIRECTORY "${e2e_dir}")

add_test (
  NAME prob1a
  COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-end-to-end.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmb-target-problems/prob1/../meshes/mesh1.gen"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob1a.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end/prob1a"
)
config_test(prob1a)

add_test (
  NAME prob1b
  COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-end-to-end.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmb-target-problems/prob1/../meshes/mesh1.gen"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob1a.yml"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob1b.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end/prob1b"
)
config_test(prob1b)

add_test (
  NAME prob1c
  COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-end-to-end.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmb-target-problems/meshes/mesh2.gen"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob1a.yml"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob1c.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end/prob1c"
)
config_test(prob1c)

# Todo prob2 with induction heating

add_test (
  NAME prob3
  COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-end-to-end.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmb-target-problems/prob1/../meshes/mesh2.gen"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob3.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end/prob3"
)
config_test(prob3)

add_test (
  NAME prob5a
  COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-end-to-end.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmb-target-problems/prob5/../meshes/mesh3.gen"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob5a.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end/prob5a"
)
config_test(prob5a)

add_test (
  NAME prob4-genre
  COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-end-to-end.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmb-target-problems/prob4/../meshes/mesh4.gen"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob4-genre.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end/prob4-genre"
)
config_test(prob4-genre)

add_test (
  NAME prob4-truchas
  COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-end-to-end.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmb-target-problems/prob4/../meshes/mesh4.gen"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob4-genre.yml"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob4-truchas.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end/prob4-truchas"
)
config_test(prob4-truchas)

add_test (
  NAME prob5b
  COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-end-to-end.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmb-target-problems/prob5/../meshes/mesh2.gen"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob5b.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end/prob5b"
)
config_test(prob5b)

add_test (
  NAME matv1
  COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-end-to-end.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmb-target-problems/prob1/../meshes/mesh2.gen"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob3.yml"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/matv1.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end/matv1"
)
config_test(matv1)

add_test (
  NAME material_collection
  COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-material-collection.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/test-material-collection.yml"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/matv1.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/material-collection"
)
config_test(material_collection)
