from ceph_volume.util import arg_validators
import argparse


def common_parser(prog, description):
    """
    Both prepare and create share the same parser, those are defined here to
    avoid duplication
    """
    parser = argparse.ArgumentParser(
        prog=prog,
        formatter_class=argparse.RawDescriptionHelpFormatter,
        description=description,
    )
    required_args = parser.add_argument_group('required arguments')
    parser.add_argument(
        '--journal',
        help='A logical volume (vg_name/lv_name), or path to a device',
    )
    required_args.add_argument(
        '--data',
        required=True,
        type=arg_validators.LVPath(),
        help='A logical volume (vg_name/lv_name) for OSD data',
    )
    parser.add_argument(
        '--journal-size',
        default=5,
        metavar='GB',
        type=int,
        help='Size (in GB) A logical group name or a path to a logical volume',
    )
    parser.add_argument(
        '--bluestore',
        action='store_true', default=False,
        help='Use the bluestore objectstore (not currently supported)',
    )
    parser.add_argument(
        '--filestore',
        action='store_true', default=True,
        help='Use the filestore objectstore (currently the only supported object store)',
    )
    parser.add_argument(
        '--osd-id',
        help='Reuse an existing OSD id',
    )
    parser.add_argument(
        '--osd-fsid',
        help='Reuse an existing OSD fsid',
    )
    # Do not parse args, so that consumers can do something before the args get
    # parsed triggering argparse behavior
    return parser


create_parser = common_parser  # noqa
prepare_parser = common_parser  # noqa
