#!/usr/bin/env python

from __future__ import print_function

import argparse
import logging
import os
import sys
import yaml

from rosinstall_generator.generator import generate_rosinstall, sort_rosinstall


def main(argv=sys.argv[1:]):
    distro = os.environ['ROS_DISTRO'] if 'ROS_DISTRO' in os.environ else None
    parser = argparse.ArgumentParser(
        description='Generate a .rosinstall file for a set of packages.')
    parser.add_argument('--debug', action='store_true', default=False,
        help='Print debug information to stderr')
    parser.add_argument('--distro', required=distro is None, default=distro, help='The ROS distro (default: environment variable ROS_DISTRO if defined)')
    parser.add_argument('package_names', nargs='+', metavar='pkgname', help='Wet package names, dry stack names or variant names')
    parser.add_argument('--deps', action='store_true', default=False,
        help='Include recursive dependencies')
    group = parser.add_mutually_exclusive_group()
    group.add_argument('--wet-only', action='store_true', default=False,
        help='Only include wet packages')
    group.add_argument('--dry-only', action='store_true', default=False,
        help='Only include dry stacks')
    parser.add_argument('--tar', action='store_true', default=False,
        help='Use tarballs instead of repositories for wet packages (dry packages are always tarballs)')
    args = parser.parse_args(argv)

    if args.debug:
        logging.basicConfig(format='%(message)s', level=logging.DEBUG)
    logger = logging.getLogger('rosinstall_generator')
    for h in logger.handlers:
        logger.removeHandler(h)
    logger.addHandler(logging.StreamHandler(sys.stderr))

    try:
        rosinstall_data = generate_rosinstall(args.distro, args.package_names, wet_only=args.wet_only, dry_only=args.dry_only, deps=args.deps, tar=args.tar)
    except RuntimeError as e:
        if args.debug:
            raise
        print(str(e), file=sys.stderr)
        return 1
    rosinstall_data = sort_rosinstall(rosinstall_data)
    print(yaml.safe_dump(rosinstall_data, default_flow_style=False))
    return 0


if __name__ == '__main__':
    rc = main()
    sys.exit(rc)
