#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0-only
# Copyright (c) 2019-2020 Max Rees
# See LICENSE for more information.
import argparse # ArgumentParser, REMAINDER
import sys      # exit
from pathlib import Path

import apkfoundry.container # Container
import apkfoundry._log as _log

_log.init()

opts = argparse.ArgumentParser(
    usage="af-chroot [options ...] CDIR [COMMAND ...]",
    description="""Enter the APK Foundry container located at CDIR.""",
)
opts.add_argument(
    "-n", "--networking", dest="net", action="store_true",
    help="enable network access",
)
opts.add_argument(
    "--new-session", dest="setsid", action="store_true",
    help="start a new session for the container",
)
opts.add_argument(
    "--no-sudo", dest="sudo", action="store_false",
    help="disable use of af-sudo",
)
opts.add_argument(
    "-r", "--repo",
    help="change repository to REPO",
)
opts.add_argument(
    "--ro-aports", action="store_true",
    help="mount APORTSDIR as read-only",
)
opts.add_argument(
    "--rw-root", dest="ro_root", action="store_false",
    help="mount container root as read/write",
)
opts.add_argument(
    "--su", action="store_true",
    help="enter container as root",
)
opts.add_argument(
    "cdir", metavar="CDIR",
    help="container directory",
)
opts.add_argument(
    "argv", metavar="COMMAND", nargs=argparse.REMAINDER,
    help="command to execute (default: sh -)",
)
opts = opts.parse_args()
opts.cdir = Path(opts.cdir).resolve(strict=False)
if not opts.argv:
    opts.argv = ["sh", "-"]

cont = apkfoundry.container.Container(
    opts.cdir,
    sudo=opts.sudo,
)

rc, _ = cont.run(
    opts.argv,
    su=opts.su,
    net=opts.net,
    repo=opts.repo,
    ro_aports=opts.ro_aports,
    ro_root=opts.ro_root,
    setsid=opts.setsid,
)

sys.exit(rc)
