cmake_minimum_required(VERSION 3.18)
project(pMoleculeScriptsCMake LANGUAGES C)

find_package(Python3 REQUIRED COMPONENTS Interpreter)
include(PDynamoPython)
include(PDynamoTests)
include(PDynamoInstall)

option(PDYNAMO_ENABLE_PMOLECULESCRIPTS_FUNCTIONAL_TESTS "Enable legacy pMoleculeScripts functional tests." OFF)

set(PYTHON_ROOT_DIR ${CMAKE_BINARY_DIR}/python)
set(PY_OUTPUT_DIR   ${PYTHON_ROOT_DIR}/pMoleculeScripts)

file(MAKE_DIRECTORY ${PYTHON_ROOT_DIR})
file(MAKE_DIRECTORY ${PY_OUTPUT_DIR})

pd_copy_python_package(
    "${CMAKE_CURRENT_SOURCE_DIR}/pMoleculeScripts"
    "pMoleculeScripts"
    "${PYTHON_ROOT_DIR}"
    ""
    PMOLECULESCRIPTS_COPIED_PY_FILES
)

message(STATUS "Copied pMoleculeScripts files      : ${PMOLECULESCRIPTS_COPIED_PY_FILES}")
message(STATUS "pMoleculeScripts python root dir   : ${PYTHON_ROOT_DIR}")
message(STATUS "pMoleculeScripts python output dir : ${PY_OUTPUT_DIR}")

pd_add_import_tests(
    "${CMAKE_CURRENT_SOURCE_DIR}/tests"
    "${PYTHON_ROOT_DIR}"
    "${PY_OUTPUT_DIR}"
    "test_import_pmoleculescripts"
    "test_import_all_pmoleculescripts_modules"
)

if(PDYNAMO_ENABLE_PMOLECULESCRIPTS_FUNCTIONAL_TESTS)
    set(PMOLECULESCRIPTS_FUNCTIONAL_TESTS
        FindCIPLabels
        HydrogenBuilding
        IonMobilities
        OptimizeGeometries
        PathwaysCOS
        RotationTranslationRemoval
        VibrationalDynamics
    )

    set(PMOLECULESCRIPTS_FUNCTIONAL_SCRATCH_DIR "${CMAKE_BINARY_DIR}/scratch/pmoleculescripts-tests")
    file(MAKE_DIRECTORY "${PMOLECULESCRIPTS_FUNCTIONAL_SCRATCH_DIR}")

    foreach(TEST_NAME IN LISTS PMOLECULESCRIPTS_FUNCTIONAL_TESTS)
        add_test(
            NAME "test_pmoleculescripts_${TEST_NAME}"
            COMMAND ${Python3_EXECUTABLE}
                    "${CMAKE_CURRENT_SOURCE_DIR}/tests/run_legacy_test.py"
                    "${PYTHON_ROOT_DIR}"
                    "${CMAKE_CURRENT_SOURCE_DIR}/tests"
                    "${TEST_NAME}"
                    "${CMAKE_SOURCE_DIR}"
                    "${CMAKE_CURRENT_SOURCE_DIR}"
                    "${PMOLECULESCRIPTS_FUNCTIONAL_SCRATCH_DIR}"
        )

        set_tests_properties(
            "test_pmoleculescripts_${TEST_NAME}"
            PROPERTIES
            ENVIRONMENT "PYTHONPATH=${PYTHON_ROOT_DIR};PDYNAMO_PARAMETERS=${CMAKE_BINARY_DIR}/parameters;PDYNAMO_PMOLECULE=${CMAKE_SOURCE_DIR}/pMolecule-2.0.0;PDYNAMO_PMOLECULESCRIPTS=${CMAKE_CURRENT_SOURCE_DIR};PDYNAMO_ROOT=${CMAKE_SOURCE_DIR};PDYNAMO_SCRATCH=${PMOLECULESCRIPTS_FUNCTIONAL_SCRATCH_DIR};PDYNAMO_TEST_QUIET=1;PDYNAMO_TEST_SHORT=1;PYTHONDONTWRITEBYTECODE=1"
            TIMEOUT 1800
        )
    endforeach()
endif()

pd_install_python_package(
    "${CMAKE_CURRENT_SOURCE_DIR}/pMoleculeScripts"
    "pMoleculeScripts"
)

add_custom_target(check_pmoleculescripts
    COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure
)
