#!/usr/bin/env bash
################################################################################
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
# limitations under the License.
################################################################################
set -e

# override env to use Java 17 to for build instead default Java 8
# path to JDK is taken from https://github.com/apache/flink-connector-shared-utils/blob/ci_utils/docker/base/Dockerfile#L37-L40
export JAVA_HOME=$JAVA_HOME_17_X64
export PATH=$JAVA_HOME_17_X64/bin:$PATH

mvn --version
java -version
javadoc -J-version

# workaround for a git security patch
git config --global --add safe.directory /root/flink
git submodule update --init --recursive

cd docs

# setup hugo
source setup_hugo.sh

# Setup the external documentation modules
source setup_docs.sh

cd ..

# Build the docs
hugo --source docs

# generate docs into docs/target
hugo -v --source docs --destination target
if [ $? -ne 0 ]; then
	echo "Error building the docs"
	exit 1
fi

# Generate .htaccess with dynamic 404 path based on branch
BRANCH=$(git branch --show-current)
cat > docs/target/.htaccess << EOF
# Ensure index.html is served for directory requests
DirectoryIndex index.html

# Custom 404 error page
ErrorDocument 404 /flink/flink-docs-${BRANCH}/404.html
EOF

# build Flink; required for Javadoc step
mvn clean install -B -DskipTests -Dfast -Dskip.npm -Pskip-webui-build

# build java/scala docs
mkdir -p docs/target/api
mvn javadoc:aggregate -B \
    -Pskip-webui-build \
    -Dmaven.javadoc.failOnError=true \
    -Dcheckstyle.skip=true \
    -Dspotless.check.skip=true \
    -Denforcer.skip=true \
    -Dheader="<a href=\"http://flink.apache.org/\" target=\"_top\"><h1>Back to Flink Website</h1></a> <script>var _paq=window._paq=window._paq||[];_paq.push([\"disableCookies\"]),_paq.push([\"setDomains\",[\"*.flink.apache.org\",\"*.nightlies.apache.org/flink\"]]),_paq.push([\"trackPageView\"]),_paq.push([\"enableLinkTracking\"]),function(){var u=\"//analytics.apache.org/\";_paq.push([\"setTrackerUrl\",u+\"matomo.php\"]),_paq.push([\"setSiteId\",\"1\"]);var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s)}();</script>"

# Inject canonical tags into Javadoc HTML files to point to stable docs version
CANONICAL_BASE="https://nightlies.apache.org/flink/flink-docs-stable/api/java"
find target/site/apidocs -name "*.html" -type f | while read -r file; do
    REL_PATH="${file#target/site/apidocs/}"
    CANONICAL_URL="${CANONICAL_BASE}/${REL_PATH}"
    sed -i "s|<head>|<head>\n<link rel=\"canonical\" href=\"${CANONICAL_URL}\">|" "$file"
done

mv target/site/apidocs docs/target/api/java

# build python docs
if [ -f  ./flink-python/dev/lint-python.sh ]; then
    # Just completely ignore sudo in conda.
    unset SUDO_UID SUDO_GID SUDO_USER

    # Set base URL for cross-references to main Flink docs (used by sphinx extlinks)
    export FLINK_DOCS_BASE_URL="https://nightlies.apache.org/flink/flink-docs-${BRANCH}"

    # build English python docs
    # disable the gateway, because otherwise it tries to find FLINK_HOME to access Java classes
    PYFLINK_GATEWAY_DISABLED=1 ./flink-python/dev/lint-python.sh -i "sphinx"

    # build Chinese python docs into _build/html/zh/ subdirectory
    # Ensure uv (installed by lint-python.sh into .uv/bin/) is on PATH so the Makefile auto-detects it
    export PATH="$(pwd)/flink-python/dev/.uv/bin:$PATH"
    pushd flink-python/docs
    make zh
    popd

    # move python docs (English at root, Chinese at zh/)
    mv flink-python/docs/_build/html docs/target/api/python
fi
