# SPDX-FileCopyrightText: 2025 toastal <toastal@posteo.net>
# SPDX-License-Identifier: MPL-2.0
{
  lib,
  runCommand,
  docutils,
  nickel,
  soupault,
  precompressBrotli ? false,
  parallel,
  brotli,

  w3m-site_assets,
}:

let
  fs = lib.fileset;

  inherit (import ../utils.nix { inherit lib parallel; }) beparallel;

  soupault-prod-cfg =
    runCommand "make-soupault-conf"
      {
        src = fs.toSource {
          root = ../../.;
          fileset = fs.unions [
            ../../meta
            ../../ncl/soupault.ncl
            ../../soupault.toml
          ];
        };
        nativeBuildInputs = [ nickel ];
        env = {
          NICKEL_IMPORT_PATH = "${../../ncl}";
        };
      }
      ''
        nickel export --format toml --output $out << EOF
        (import "$src/ncl/soupault.ncl") & {
          settings.caching | Bool | force = false,
        }
        EOF
      '';
in
runCommand "build-w3m-site-website"
  {
    src = fs.toSource {
      root = ../../.;
      fileset = fs.unions [
        ../../plugins
        ../../site
        ../../templates
      ];
    };
    nativeBuildInputs = [
      docutils
      soupault
    ] ++ lib.optional precompressBrotli brotli;
  }
  (
    ''
      mkdir -p $out
      ln -s ${w3m-site_assets.override { inherit precompressBrotli; }} $out/assets
      cd $src
      soupault --strict true --config ${soupault-prod-cfg} --site-dir $src/site --build-dir $out
    ''
    +
      lib.optionalString precompressBrotli # bash
        ''
          find $out -type f -not -path "*/assets/*" \
              -a \( -iname "*.html" -o -iname "*.txt" \) \
            | ${beparallel ''brotli --keep --quality=11 --output={}.br {}''}
        ''
  )
