"""Logic for checking and displaying man pages."""

import subprocess
import os
from httpie.context import Environment


MAN_COMMAND = 'man'
NO_MAN_PAGES = os.getenv('HTTPIE_NO_MAN_PAGES', False)

# On some systems, HTTP(n) might exist, but we are only interested in HTTP(1).
# For more information on man page sections: <https://unix.stackexchange.com/a/138643>
MAN_PAGE_SECTION = '1'


def is_available(program: str) -> bool:
    """
    Check whether `program`'s man pages are available on this system.

    """
    if NO_MAN_PAGES or os.system == 'nt':
        return False
    try:
        process = subprocess.run(
            [MAN_COMMAND, MAN_PAGE_SECTION, program],
            shell=False,
            stdout=subprocess.DEVNULL,
            stderr=subprocess.DEVNULL
        )
    except Exception:
        # There might be some errors outside the process, e.g
        # a permission error to execute something that is not an
        # executable.
        return False
    else:
        return process.returncode == 0


def display_for(env: Environment, program: str) -> None:
    """
    Open the system man page for the given command (http/https/httpie).

    """
    subprocess.run(
        [MAN_COMMAND, MAN_PAGE_SECTION, program],
        stdout=env.stdout,
        stderr=env.stderr
    )
