"""Command-line interface for hello-hut."""
import argparse
import json
import os
import sys
from . import __version__
from .config import load_config
from .greetings import DEFAULT_NAME, greet, time_of_day_greeting
from .translations import TRANSLATIONS
def build_parser():
parser = argparse.ArgumentParser(
prog="hello-hut",
description="A friendly greeting tool for your terminal.",
)
parser.add_argument("name", nargs="?", help="who to greet")
parser.add_argument("--shout", action="store_true",
help="print the greeting in capitals")
parser.add_argument("--time-of-day", action="store_true",
help="say good morning, afternoon or evening")
parser.add_argument("--count", type=int, default=1, metavar="N",
help="repeat the greeting N times (default: 1)")
parser.add_argument("--color", choices=("auto", "always", "never"),
default="auto", help="colorize the output")
parser.add_argument("--format", choices=("text", "json"), default="text",
help="output format (default: text)")
parser.add_argument("--lang", choices=sorted(TRANSLATIONS), default=None,
help="greeting language (default: en)")
parser.add_argument("--version", action="version",
version=f"%(prog)s {__version__}")
return parser
def use_color(mode, stream=sys.stdout):
"""Decide whether to colorize, honouring NO_COLOR (https://no-color.org)."""
if mode == "always":
return True
if mode == "never" or os.environ.get("NO_COLOR"):
return False
return stream.isatty()
def main(argv=None):
args = build_parser().parse_args(argv)
config = load_config()
name = args.name or config.get("name", DEFAULT_NAME)
shout = args.shout or bool(config.get("shout", False))
lang = args.lang or config.get("lang", "en")
if args.count < 1:
print("hello-hut: --count must be at least 1", file=sys.stderr)
return 2
salutation = time_of_day_greeting() if args.time_of_day else None
message = greet(name, shout=shout, salutation=salutation, lang=lang)
for _ in range(args.count):
if args.format == "json":
print(json.dumps({"greeting": message, "name": name}))
elif use_color(args.color):
print(f"\033[1;32m{message}\033[0m")
else:
print(message)
return 0