find_package(Python3 COMPONENTS Interpreter REQUIRED)

set(SETTINGS_GUI_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/settings-gui")
set(SETTINGS_GUI_FULL_PATH "${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}/settings-gui")

option(NGOSEN_BYTECOMPILE_PYTHON "Byte-compile Python scripts during install" ON)

configure_file(
    "${CMAKE_CURRENT_SOURCE_DIR}/version.py.in"
    "${CMAKE_CURRENT_BINARY_DIR}/version.py"
    @ONLY
)

install(DIRECTORY core ui ui_gtk
        DESTINATION "${SETTINGS_GUI_INSTALL_DIR}"
        FILES_MATCHING PATTERN "*.py" PATTERN "*.qss" PATTERN "*.svg")

install(FILES i18n.py qt_api.py "${CMAKE_CURRENT_BINARY_DIR}/version.py"
        DESTINATION "${SETTINGS_GUI_INSTALL_DIR}")

install(FILES main.py save_log.py
        DESTINATION "${SETTINGS_GUI_INSTALL_DIR}"
        PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)

set(LAUNCHER_SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/fcitx5-ngosen-settings")

file(WRITE "${LAUNCHER_SCRIPT}"
"#!/bin/sh
exec \"${SETTINGS_GUI_FULL_PATH}/main.py\" \"$@\"
")

install(PROGRAMS "${LAUNCHER_SCRIPT}"
        DESTINATION "${CMAKE_INSTALL_BINDIR}")

set(SAVE_LOG_SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/ngosen-save-log")

file(WRITE "${SAVE_LOG_SCRIPT}"
"#!/bin/sh
exec \"${SETTINGS_GUI_FULL_PATH}/save_log.py\" \"$@\"
")

install(PROGRAMS "${SAVE_LOG_SCRIPT}"
        DESTINATION "${CMAKE_INSTALL_BINDIR}")

if(NGOSEN_BYTECOMPILE_PYTHON)
    install(CODE "
        message(STATUS \"Byte-compiling Python scripts...\")
        execute_process(
            COMMAND \"${Python3_EXECUTABLE}\" -m compileall -q -o 0 -o 1 -d \"${SETTINGS_GUI_FULL_PATH}\"
                \"\$ENV{DESTDIR}${SETTINGS_GUI_FULL_PATH}\"
        )
    ")
endif()

fcitx5_translate_desktop_file(
    "${CMAKE_CURRENT_SOURCE_DIR}/io.github.ngosen.NgoSen.Settings.desktop.in"
    io.github.ngosen.NgoSen.Settings.desktop
    DESKTOP
)

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/io.github.ngosen.NgoSen.Settings.desktop"
        DESTINATION "${CMAKE_INSTALL_DATADIR}/applications")
