#!/usr/bin/env python3

# Copyright (C) 2020  Matthew "strager" Glazar
# See end of file for extended copyright information.

import os
import subprocess
import re
import pathlib


ASCIIDOCTOR_VERSION = "2.0.17"


def main():
    qljs_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
    os.chdir(qljs_dir)

    gem_home = os.path.join(qljs_dir, "man", "gems")
    env = dict(os.environ, GEM_HOME=gem_home)

    asciidoctor_is_installed = (
        subprocess.call(
            [
                "gem",
                "list",
                "--installed",
                "--version",
                ASCIIDOCTOR_VERSION,
                "asciidoctor",
            ],
            env=env,
            stdout=subprocess.DEVNULL,
        )
        == 0
    )
    if not asciidoctor_is_installed:
        subprocess.check_call(
            [
                "gem",
                "install",
                "--version",
                ASCIIDOCTOR_VERSION,
                "asciidoctor",
            ],
            env=env,
        )

    asciidoctor_path = os.path.join(gem_home, "bin", "asciidoctor")
    subprocess.check_output(
        [
            asciidoctor_path,
            "-b",
            "manpage",
            "-D",
            "man/",
            "-o",
            "quick-lint-js.1",
            "cli.adoc",
        ],
        env=env,
    )
    subprocess.check_output(
        [
            asciidoctor_path,
            "-b",
            "manpage",
            "-D",
            "man/",
            "-o",
            "quick-lint-js.config.5",
            "config.adoc",
        ],
        env=env,
    )
    subprocess.check_output(
        [
            asciidoctor_path,
            "-b",
            "manpage",
            "-D",
            "man/",
            "-o",
            "quick-lint-js-lsp.8",
            "lsp.adoc",
        ],
        env=env,
    )

    process_man(pathlib.Path("man/quick-lint-js.1"))
    process_man(pathlib.Path("man/quick-lint-js.config.5"))
    process_man(pathlib.Path("man/quick-lint-js-lsp.8"))


def process_man(file_path):
    contents = file_path.read_text()

    top = """.\\" Code generated by docs/man/generate-man-pages. DO NOT EDIT.
.\\" source: docs/*.adoc
.
.\\" Copyright (C) 2020  Matthew "strager" Glazar
.\\" See end of file for extended copyright information.
.
.\\" Manual page for the 'man' utility.
.
.
"""
    bottom = """

.\\" quick-lint-js finds bugs in JavaScript programs.
.\\" Copyright (C) 2020  Matthew "strager" Glazar
.\\"
.\\" This file is part of quick-lint-js.
.\\"
.\\" quick-lint-js is free software: you can redistribute it and/or modify
.\\" it under the terms of the GNU General Public License as published by
.\\" the Free Software Foundation, either version 3 of the License, or
.\\" (at your option) any later version.
.\\"
.\\" quick-lint-js is distributed in the hope that it will be useful,
.\\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
.\\" GNU General Public License for more details.
.\\"
.\\" You should have received a copy of the GNU General Public License
.\\" along with quick-lint-js.  If not, see <https://www.gnu.org/licenses/>.
"""
    contents = top + contents + bottom

    file_path.write_text(contents)


if __name__ == "__main__":
    main()

# quick-lint-js finds bugs in JavaScript programs.
# Copyright (C) 2020  Matthew "strager" Glazar
#
# This file is part of quick-lint-js.
#
# quick-lint-js is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# quick-lint-js is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with quick-lint-js.  If not, see <https://www.gnu.org/licenses/>.
