#   BAREOS® - Backup Archiving REcovery Open Sourced
#
#   Copyright (C) 2021-2026 Bareos GmbH & Co. KG
#
#   This program is Free Software; you can redistribute it and/or
#   modify it under the terms of version three of the GNU Affero General Public
#   License as published by the Free Software Foundation and included
#   in the file LICENSE.
#
#   This program is distributed in the hope that it will be useful, but
#   WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
#   Affero General Public License for more details.
#
#   You should have received a copy of the GNU Affero General Public License
#   along with this program; if not, write to the Free Software
#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
#   02110-1301, USA.

get_filename_component(BASENAME ${CMAKE_CURRENT_BINARY_DIR} NAME)
set(ndmp_data_agent_address
    ""
    CACHE STRING "address of the ndmp data agent"
)
set(ndmp_data_agent_user
    "ndmpadmin"
    CACHE STRING "user to access the ndmp data agent"
)
set(ndmp_data_agent_password
    "test"
    CACHE STRING "password to access the ndmp data agent"
)
if(ndmp_data_agent_address)

  find_program(IP_COMMAND ip)
  if(IP_COMMAND)
    execute_process(
      COMMAND ${IP_COMMAND} route get ${ndmp_data_agent_address}
      OUTPUT_VARIABLE ROUTE_INFO_TO_ACCESS_NDMP_DATA_AGENT
    )

    # cmake-format: off
    #
    # Example:
    # 192.168.76.10 via 192.168.77.1 dev eth0 src 192.168.77.101 uid 25031
    string(
      REGEX REPLACE ".* src ([^ ]+).*"
      \\1
      IP_ADDRESS_TO_ACCESS_NDMP_DATA_AGENT
      ${ROUTE_INFO_TO_ACCESS_NDMP_DATA_AGENT}
    )
    # cmake-format: on
    # validation after extraction
    if(IP_ADDRESS_TO_ACCESS_NDMP_DATA_AGENT)
      string(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+$" IP_VALID
                   "${IP_ADDRESS_TO_ACCESS_NDMP_DATA_AGENT}"
      )
      if(NOT IP_VALID)
        message(DEBUG "ERROR NDMP ROUTE INFO INVALID")
        set(IP_ADDRESS_TO_ACCESS_NDMP_DATA_AGENT "")
      endif()
    endif()

    message(DEBUG "NDMP ROUTE INFO: ${ROUTE_INFO_TO_ACCESS_NDMP_DATA_AGENT}")

    message(
      STATUS
        "IP_ADDRESS_TO_ACCESS_NDMP_DATA_AGENT (${ndmp_data_agent_address})=${IP_ADDRESS_TO_ACCESS_NDMP_DATA_AGENT}"
    )

    if(IP_ADDRESS_TO_ACCESS_NDMP_DATA_AGENT)
      if(NOT ndmp_data_agent_user)
        set(ndmp_data_agent_user ndmpadmin)
      endif()
      if(NOT ndmp_data_agent_password)
        set(ndmp_data_agent_password test)
      endif()

      create_systemtest(${SYSTEMTEST_PREFIX} ${BASENAME})
      get_property(
        ndmp_bareos_tests
        DIRECTORY
        PROPERTY TESTS
      )
      string(MAKE_C_IDENTIFIER "${ndmp_data_agent_address}"
                               NDMP_DATA_AGENT_RESOURCE_LOCK
      )
      set_tests_properties(
        ${ndmp_bareos_tests}
        PROPERTIES RESOURCE_LOCK
                   ndmp_systemtest_${NDMP_DATA_AGENT_RESOURCE_LOCK}
      )
      set(NDMP_BAREOS_ENABLED
          ON
          PARENT_SCOPE
      )
      set_tests_properties(
        # This temporary test will be removed at the end of the sprint
        system:ndmp-bareos:00-full-fail-rerun PROPERTIES DISABLED TRUE
      )
      set_tests_properties(
        # This feature needs to be implemented before enabling the test
        system:ndmp-bareos:04-restore-single-file-with-file PROPERTIES DISABLED
                                                                       TRUE
      )
      set_tests_properties(
        system:ndmp-bareos:09-restore-incremental-last-with-file
        PROPERTIES DISABLED TRUE
      )
      set_tests_properties(
        # Disabled until a reliable compare method is found
        system:ndmp-bareos:11-compare-with-copy PROPERTIES DISABLED TRUE
      )
      add_alphabetic_requirements(${SYSTEMTEST_PREFIX} ${BASENAME})
    else()
      create_systemtest(
        ${SYSTEMTEST_PREFIX} ${BASENAME} DISABLED COMMENT
        "failed to get IP_ADDRESS_TO_ACCESS_NDMP_DATA_AGENT"
      )
    endif()
  else()
    create_systemtest(
      ${SYSTEMTEST_PREFIX} ${BASENAME} DISABLED COMMENT "ip command not found"
    )
  endif()
else()
  create_systemtest(
    ${SYSTEMTEST_PREFIX} ${BASENAME} DISABLED COMMENT
    "ndmp_data_agent_address not given"
  )
endif()
