#!/usr/bin/bash
set -euo pipefail
IFS=$'\n\t'
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [[ -d "${SCRIPT_DIR}/../../.git" ]] || [[ -f "${SCRIPT_DIR}/../../nodo/config/etc/mirrors.env" ]]; then
REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
else
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
fi
if [[ -f "${REPO_ROOT}/nodo/config/etc/mirrors.env" ]]; then
# shellcheck source=/dev/null
source "${REPO_ROOT}/nodo/config/etc/mirrors.env"
elif [[ -f "${REPO_ROOT}/config/etc/mirrors.env" ]]; then
# shellcheck source=/dev/null
source "${REPO_ROOT}/config/etc/mirrors.env"
elif [[ -f "${REPO_ROOT}/etc/mirrors.env" ]]; then
# shellcheck source=/dev/null
source "${REPO_ROOT}/etc/mirrors.env"
fi
MIRRORS_STAGING_DIR="${MIRRORS_STAGING_DIR:-$HOME/ipfs/staging}"
INPUT_RST="${1:-${REPO_ROOT}/README.rst}"
OUTPUT_HTML="${2:-${REPO_ROOT}/README.html}"
if [[ ! -f "${INPUT_RST}" ]]; then
echo "Error: Archivo de entrada no encontrado: ${INPUT_RST}" >&2
exit 1
fi
if ! command -v pandoc >/dev/null 2>&1; then
echo "Error: pandoc no está instalado en el sistema." >&2
exit 1
fi
echo "==> Generando fragmentos HTML5 con pandoc..."
# shellcheck disable=SC2016
toc_content="$(pandoc -f rst -t html5 --toc --toc-depth=2 --template=<(echo '$toc$') "${INPUT_RST}")"
body_content="$(pandoc -f rst -t html5 "${INPUT_RST}")"
doc_title="$(sed -n '2p' "${INPUT_RST}")"
if [[ -n "${toc_content}" ]]; then
# Eliminar el contenedor vacío generado automáticamente por pandoc para .. contents::
body_content="$(echo "${body_content}" | perl -0777 -pe 's/
]*>\s*
.*?<\/p>\s*<\/div>//gs')"
toc_block=""
body_content="${body_content/
<{tag} id="{hid}"{rest}>"""
return m.group(0)
sys.stdout.write(re.sub(r"<([hH][1-6])\s+id=\"([^\"]+)\"([^>]*)>", repl, content))
')"
echo "==> Ensamblando página HTML5 responsiva autocontenida..."
{
cat << 'HTML_HEAD'
HTML_HEAD
cat << HTML_TITLE
${doc_title} | Fundación MxOS
HTML_TITLE
cat << 'HTML_CSS'
HTML_CSS
echo "${body_content}"
cat << 'HTML_FOOT'
HTML_FOOT
} > "${OUTPUT_HTML}"
echo " Generado: ${OUTPUT_HTML} ($(wc -c < "${OUTPUT_HTML}") bytes)"
# Generar index.html dedicado como portal principal
"${SCRIPT_DIR}/mxos-build-index.bash" "${REPO_ROOT}/index.html"
echo "==> Copiando archivos a directorio de preparación (${MIRRORS_STAGING_DIR})..."
if [[ -d "${MIRRORS_STAGING_DIR}" ]]; then
# Limpiar archivos de desarrollo/soporte innecesarios en la raíz de staging
rm -rf "${MIRRORS_STAGING_DIR}/README.rst" \
"${MIRRORS_STAGING_DIR}/logo.svg" \
"${MIRRORS_STAGING_DIR}/guardianes.json" \
"${MIRRORS_STAGING_DIR:?}/bin" \
"${MIRRORS_STAGING_DIR}/config" \
"${MIRRORS_STAGING_DIR:?}/etc" \
"${MIRRORS_STAGING_DIR}/systemd" 2>/dev/null || true
# Copiar únicamente páginas web y directorio nodo/
cp -f "${OUTPUT_HTML}" "${MIRRORS_STAGING_DIR}/README.html"
cp -f "${REPO_ROOT}/index.html" "${MIRRORS_STAGING_DIR}/index.html"
if [[ -f "${REPO_ROOT}/cover.jpg" ]]; then
cp -f "${REPO_ROOT}/cover.jpg" "${MIRRORS_STAGING_DIR}/cover.jpg"
fi
mkdir -p "${MIRRORS_STAGING_DIR}/nodo" "${MIRRORS_STAGING_DIR}/docs"
cp -rf "${REPO_ROOT}/nodo/"* "${MIRRORS_STAGING_DIR}/nodo/"
if [[ -d "${REPO_ROOT}/docs/_build/html" ]]; then
cp -rf "${REPO_ROOT}/docs/_build/html/"* "${MIRRORS_STAGING_DIR}/docs/"
fi
echo " Archivos sincronizados en staging (raíz limpia: index.html, README.html, docs/ y nodo/)."
fi
echo "==> Proceso completado exitosamente."