#
# Erzeugung / Update der ts & qm-Dateien
# Qt6 Migration: Qt6::lupdate → Qt6::lupdate, PythonInterp → Python3
#

SET(_pri_dir "${CMAKE_BINARY_DIR}/translations/")
IF(BUILD_TS_FILES)
  GET_PROPERTY(_targets GLOBAL PROPERTY NGL_TS_TARGETS)
  # MESSAGE(STATUS "translation targets: ${_targets}")

  # make sure to not have old .pri files ...
  FILE(GLOB _pri_files_to_remove LIST_DIRECTORIES false "${_pri_dir}*.pri")
  IF (_pri_files_to_remove)
    FILE(REMOVE ${_pri_files_to_remove})
  ENDIF()

  FOREACH(_target ${_targets})
    GET_TARGET_PROPERTY(_no_translation ${_target} NO_TRANSLATION)

    IF(_no_translation)
      CONTINUE()
    ENDIF()
    GET_TARGET_PROPERTY(_src_dir ${_target} SOURCE_DIR)
    GET_TARGET_PROPERTY(_bin_dir ${_target} BINARY_DIR)

    # build up sources
    GET_TARGET_PROPERTY(_all_sources ${_target} SOURCES)
    SET(_ts_sources "")
    FOREACH(_source ${_all_sources})
      GET_FILENAME_COMPONENT(_ext ${_source} EXT)
      IF(_ext STREQUAL ".cpp" OR
         _ext STREQUAL ".hpp" OR
         _ext STREQUAL ".c" OR
         _ext STREQUAL ".h" OR
         _ext STREQUAL ".ui")
        GET_FILENAME_COMPONENT(_name ${_source} NAME_WE)
        IF(NOT _name MATCHES "^moc_.*$" AND
           NOT _name MATCHES "^ui_.*h$")
          IF(IS_ABSOLUTE ${_source})
            LIST(APPEND _ts_sources ${_source})
          ELSE()
            GET_FILENAME_COMPONENT(_abs_FILE ${_src_dir}/${_source} ABSOLUTE)
            IF(EXISTS ${_abs_FILE})
              LIST(APPEND _ts_sources ${_abs_FILE})
            ELSE()
              GET_FILENAME_COMPONENT(_abs_FILE ${_bin_dir}/${_source} ABSOLUTE)
              IF(EXISTS ${_abs_FILE})
                LIST(APPEND _ts_sources ${_abs_FILE})
              ELSE()
                MESSAGE(STATUS "Can not find absolute location of source file '${_source}")
              ENDIF()
            ENDIF()
          ENDIF()
        ENDIF()
      ENDIF()
    ENDFOREACH()

    LIST(LENGTH _ts_sources _len)
    IF(${_len} GREATER 0)
      SET(_ts_pri ${_pri_dir}${_target}_lupdate.pri)
      STRING(REPLACE ";" " " _pro_srcs "${_ts_sources}")
      FILE(WRITE "${_ts_pri}" "SOURCES += ${_pro_srcs}")
    ENDIF()
  ENDFOREACH()

  MACRO(TDS_GENERATE_TS_FILES _language)
    FIND_PACKAGE(Python3 REQUIRED)

    SET(_pro_file ${CMAKE_CURRENT_BINARY_DIR}/tds_${_language}.pro)
    SET(_ts_file  ${CMAKE_CURRENT_SOURCE_DIR}/tds_${_language}.ts)
    FILE(GLOB _pri_files ${CMAKE_CURRENT_BINARY_DIR} "*.pri")
    ADD_CUSTOM_COMMAND(OUTPUT  ${_pro_file}
                       COMMAND Python3::Interpreter
                          ARGS ${CMAKE_CURRENT_SOURCE_DIR}/create_ts_pro.py ${CMAKE_CURRENT_BINARY_DIR} ${_pro_file} ${_targets_to_ignore}
                       DEPENDS ${_pri_files} create_ts_pro.py
    )

    #SET(_lupdate_options -target-language ${_language} -locations absolute -tr-function-alias QT_TRANSLATE_NOOP+=tr_lts -no-obsolete)
    SET(_lupdate_options -target-language ${_language} -locations absolute -tr-function-alias QT_TRANSLATE_NOOP+=tr_lts)
    ADD_CUSTOM_TARGET(update_ts_${_language}
        COMMAND Qt6::lupdate ${_lupdate_options} ${_pro_file} -ts ${_ts_file}
        DEPENDS ${_pro_file}
    )
  ENDMACRO(TDS_GENERATE_TS_FILES)

  TDS_GENERATE_TS_FILES(en_US)
  TDS_GENERATE_TS_FILES(en_GB)
  TDS_GENERATE_TS_FILES(de_DE)

ENDIF()

MACRO(TDS_INSTALL_TRANSLATION _language _project)
  SET(_ts_file  ${CMAKE_CURRENT_SOURCE_DIR}/${_project}_${_language}.ts)

  SET(_qm_files)
  NGL_ADD_TRANSLATION(${_pri_dir}${_language} ${_project} ${_ts_file} _qm_files)
  NGL_INSTALL(ALL FILES ${_qm_files} DESTINATION translations/${_language})

  ADD_CUSTOM_TARGET(${_project}-translation-${_language} ALL DEPENDS ${_qm_files})
ENDMACRO()
# TDS_INSTALL_TRANSLATION Aufrufe暂时 kommentiert - NGL_INSTALL Signaturen müssen angepasst werden
# TDS_INSTALL_TRANSLATION(en_US tds)
# TDS_INSTALL_TRANSLATION(en_GB tds)
# TDS_INSTALL_TRANSLATION(de_DE tds)
# TDS_INSTALL_TRANSLATION(en_US kdreports)
# TDS_INSTALL_TRANSLATION(en_GB kdreports)
# TDS_INSTALL_TRANSLATION(de_DE kdreports)