find_program(MSGFMT_EXECUTABLE msgfmt REQUIRED)

set(PROVIDERS
    facebook
    flickr
    google
    mcloud
    microsoft
    nextcloud
    owncloud
    x
    vk
)

foreach(PROVIDER ${PROVIDERS})
    configure_file(
        providers/${PROVIDER}.provider.in.in
        ${CMAKE_CURRENT_BINARY_DIR}/providers/${PROVIDER}.provider.in
        @ONLY
    )
endforeach()

set(PROVIDER_FILES)
foreach(PROVIDER ${PROVIDERS})
    set(PROVIDER_IN ${CMAKE_CURRENT_BINARY_DIR}/providers/${PROVIDER}.provider.in)
    set(PROVIDER_OUT ${CMAKE_CURRENT_BINARY_DIR}/providers/${PROVIDER}.provider)

    add_custom_command(
        OUTPUT ${PROVIDER_OUT}
        COMMAND ${CMAKE_COMMAND} -E env GETTEXTDATADIRS=${CMAKE_SOURCE_DIR}
                ${MSGFMT_EXECUTABLE} --xml --template ${PROVIDER_IN}
                -d ${CMAKE_SOURCE_DIR}/po
                -o ${PROVIDER_OUT}
        DEPENDS ${PROVIDER_IN}
        COMMENT "Generating ${PROVIDER}.provider"
    )
    list(APPEND PROVIDER_FILES ${PROVIDER_OUT})
endforeach()

file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/services)

set(SERVICES
    facebook-microblog
    facebook-sharing
    flickr-microblog
    flickr-sharing
    google-drive
    google-im
    picasa
    x-microblog
)

set(SERVICE_FILES)
foreach(SERVICE ${SERVICES})
    set(SERVICE_IN ${CMAKE_CURRENT_SOURCE_DIR}/services/${SERVICE}.service.in)
    set(SERVICE_OUT ${CMAKE_CURRENT_BINARY_DIR}/services/${SERVICE}.service)

    add_custom_command(
        OUTPUT ${SERVICE_OUT}
        COMMAND ${CMAKE_COMMAND} -E env GETTEXTDATADIRS=${CMAKE_SOURCE_DIR}
                ${MSGFMT_EXECUTABLE} --xml --template ${SERVICE_IN}
                -d ${CMAKE_SOURCE_DIR}/po
                -o ${SERVICE_OUT}
        DEPENDS ${SERVICE_IN}
        COMMENT "Generating ${SERVICE}.service"
    )
    list(APPEND SERVICE_FILES ${SERVICE_OUT})
endforeach()

add_custom_target(data-files ALL DEPENDS ${PROVIDER_FILES} ${SERVICE_FILES})

install(FILES ${PROVIDER_FILES} DESTINATION ${PROVIDERS_INSTALL_DIR})
install(FILES ${SERVICE_FILES} DESTINATION ${SERVICES_INSTALL_DIR})

install(FILES
    icons/32x32/online-accounts-mcloud.png
    icons/32x32/online-accounts-microsoft.png
    icons/32x32/online-accounts-nextcloud.png
    icons/32x32/online-accounts-owncloud.png
    icons/32x32/online-accounts-vk.png
    icons/32x32/online-accounts-x.png
    DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/32x32/apps
)

install(FILES
    icons/256x256/online-accounts-mcloud.png
    icons/256x256/online-accounts-microsoft.png
    icons/256x256/online-accounts-nextcloud.png
    icons/256x256/online-accounts-owncloud.png
    icons/256x256/online-accounts-vk.png
    icons/256x256/online-accounts-x.png
    DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/256x256/apps
)

if(ENABLE_TESTS)
    find_program(XMLLINT_EXECUTABLE xmllint)
    if(XMLLINT_EXECUTABLE)
        foreach(PROVIDER_FILE ${PROVIDER_FILES})
            get_filename_component(PROVIDER_NAME ${PROVIDER_FILE} NAME_WE)
            add_test(
                NAME test-provider-${PROVIDER_NAME}
                COMMAND ${XMLLINT_EXECUTABLE} --noout ${PROVIDER_FILE}
            )
        endforeach()

        foreach(SERVICE_FILE ${SERVICE_FILES})
            get_filename_component(SERVICE_NAME ${SERVICE_FILE} NAME_WE)
            add_test(
                NAME test-service-${SERVICE_NAME}
                COMMAND ${XMLLINT_EXECUTABLE} --noout ${SERVICE_FILE}
            )
        endforeach()
    endif()
endif()
