#!/usr/bin/env python3
"""
A bare-bones reimplementation of the `ls` command in Python.
"""

import sys
import argparse
from pathlib import Path

# parse arguments
parser = argparse.ArgumentParser(description='List directory contents', prog='ls.py')
parser.add_argument('-a', action='store_true', help='show hidden files')
parser.add_argument('-r', action='store_true', help='list files in reverse alphabetical order')
parser.add_argument('path', nargs='?', default='.', help='directory or file to list')
args = parser.parse_args()

path = args.path
list_hidden = args.a # TODO: implement support for this parameter in branch `list-hidden`
reverse_order = args.r # TODO: implement support for this parameter in branch `reverse-order`


path_obj = Path(path)

if not path_obj.exists():
    print(f"ls: cannot access '{path}': No such file or directory", file=sys.stderr)
    sys.exit(1)

if path_obj.is_file():
    # when passed a file path, just list the single file
    print(path_obj.name)
    sys.exit(0)

# list directory contents
entries = path_obj.iterdir()
# sort entries by name
entries = sorted(entries, key=lambda x: x.name.lower())
# remove hidden files
entries = filter(lambda e: not e.name.startswith('.'), entries)

# print the directory listing
for entry in entries:
    name = entry.name
    if entry.is_dir():
        name += '/'
    print(name)
