#!/usr/bin/python3
#
# Copyright (C) 2010, Benjamin Drung <bdrung@ubuntu.com>
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

# pylint: disable=invalid-name
# pylint: enable=invalid-name

import argparse
import os
import sys

from ubuntutools.update_maintainer import (
    MaintainerUpdateException,
    restore_maintainer,
    update_maintainer,
)


def find_debian_dir(depth=6):
    """Scans up the directory hierarchy looking for a ./debian dir

    :param int depth: Levels to scan up the directory tree.
    :rtype: str
    :returns: a path to an existing debian/ directory, or None
    """
    for path in ["../" * n or "./" for n in list(range(0, depth + 1))]:
        debian_path = f"{path}debian"
        if os.path.exists(os.path.join(debian_path, "control")) and os.path.exists(
            os.path.join(debian_path, "changelog")
        ):
            return debian_path
    return None


def main():
    script_name = os.path.basename(sys.argv[0])
    epilog = f"See {script_name}(1) for more info."
    parser = argparse.ArgumentParser(epilog=epilog)
    parser.add_argument(
        "-d",
        "--debian-directory",
        dest="debian_directory",
        help="location of the 'debian' directory (default: %(default)s).",
        metavar="PATH",
        default=find_debian_dir() or "./debian",
    )
    parser.add_argument(
        "-r", "--restore", help="Restore the original maintainer", action="store_true"
    )
    parser.add_argument(
        "-q", "--quiet", help="print no informational messages", dest="quiet", action="store_true"
    )
    args = parser.parse_args()

    if not args.restore:
        operation = update_maintainer
    else:
        operation = restore_maintainer

    try:
        operation(args.debian_directory, not args.quiet)
    except MaintainerUpdateException:
        sys.exit(1)


if __name__ == "__main__":
    main()