#!/usr/bin/python3
import logging
import os
import tempfile

from mini_buildd import changes, cli, config, sbuild

LOG = logging.getLogger("mini_buildd")

#: Needed for man page hack in setup.py
DESCRIPTION = "Enter sbuild environment for given buildrequest changes file (manually debug failed builds)."


class CLI(cli.CLI):
    SBUILD_HOOKS = ["chroot-setup", "chroot-update-failed", "build-deps-failed", "starting-build", "build-failed", "finished-build", "chroot-cleanup"]

    def __init__(self):
        super().__init__("mini-buildd-debug-build",
                         DESCRIPTION,
                         run_as_mini_buildd=True)
        self.parser.add_argument("-s", "--sbuild-hook", default="starting-build", choices=self.SBUILD_HOOKS, action="store", help="Sbuild hook to drop for shell (see ``man sbuild``)")
        self.parser.add_argument("-u", "--user", default="mini-buildd", action="store", help="User to use for post-build shell")
        self.parser.add_argument("-p", "--extra-package", default=[], action="append", help="Extra package to install (may be given multiple times)")
        self.parser.add_argument("buildrequest", action="store", metavar="BUILDREQUEST", help="Buildrequest changes file path")

    def runcli(self):
        config.ROUTES = config.Routes(os.path.expanduser("~"))

        breq = changes.Buildrequest(self.args.buildrequest)
        with tempfile.TemporaryDirectory(dir=config.ROUTES["debug"].path.full) as tmpdir:
            breq.copy_to(tmpdir)
            sbuild.SBuild(breq, [
                "--add-depends", ",".join(self.args.extra_package),
                f"--{self.args.sbuild_hook}-commands", f"TERM={os.getenv('TERM', 'xterm')} runuser -u {self.args.user} -- %SBUILD_SHELL",
            ]).run()


if __name__ == "__main__":
    CLI().run()
