# Copyright 2019 Red Hat
#
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.
from __future__ import absolute_import

import itertools

from oslo_config import cfg


GROUP_NAME = 'glance'
OPTIONS = [
    cfg.StrOpt('image_dir',
               default='~/.tobiko/cache/glance/images',
               help=("Default directory where to look for image "
                     "files")),
]


GLANCE_IMAGE_NAMES = ['centos',
                      'centos7',
                      'cirros',
                      'fedora',
                      'rhel',
                      'ubuntu']


def register_tobiko_options(conf):
    conf.register_opts(group=cfg.OptGroup(GROUP_NAME), opts=OPTIONS)

    for image_options in get_images_options():
        conf.register_opts(group=image_options[0], opts=image_options[1])


def get_images_options():
    options = []
    for name in GLANCE_IMAGE_NAMES:
        group_name = name.lower()
        options += [(
            group_name,
            [cfg.StrOpt('image_name',
                        help="Default " + name + " image name"),
             cfg.StrOpt('image_url',
                        help="Default " + name + " image URL"),
             cfg.StrOpt('image_file',
                        help="Default " + name + " image filename"),
             cfg.StrOpt('container_format',
                        help="Default " + name + " container format"),
             cfg.StrOpt('disk_format',
                        help="Default " + name + " disk format"),
             cfg.StrOpt('username',
                        help="Default " + name + " username"),
             cfg.StrOpt('password',
                        help="Default " + name + " password"),
             cfg.FloatOpt('connection_timeout',
                          default=None,
                          help=("Default " + name +
                                " SSH connection timeout (seconds)")), ]
        )]

    return options


def list_options():
    options = [(GROUP_NAME, itertools.chain(OPTIONS))]
    for image_options in get_images_options():
        options += [
            (image_options[0], itertools.chain(image_options[1]))]
    return options
