# Django
from django.conf import settings
from django.utils.translation import ugettext_lazy as _

# Tower
from awx.conf import fields, register
from awx.conf import settings_registry

# Define a conf.py file within your app and register each setting similarly to
# the example below. Any field class from Django REST Framework or subclass
# thereof can be used for validation/conversion of the setting. All keyword
# arguments to the register function (except field_class, category,
# category_slug, depends_on, placeholder) will be used to initialize
# the field_class.

register(
    'ANSIBLE_COW_SELECTION',
    field_class=fields.ChoiceField,
    choices=[
        ('bud-frogs', _('Bud Frogs')),
        ('bunny', _('Bunny')),
        ('cheese', _('Cheese')),
        ('daemon', _('Daemon')),
        ('default', _('Default Cow')),
        ('dragon', _('Dragon')),
        ('elephant-in-snake', _('Elephant in Snake')),
        ('elephant', _('Elephant')),
        ('eyes', _('Eyes')),
        ('hellokitty', _('Hello Kitty')),
        ('kitty', _('Kitty')),
        ('luke-koala', _('Luke Koala')),
        ('meow', _('Meow')),
        ('milk', _('Milk')),
        ('moofasa', _('Moofasa')),
        ('moose', _('Moose')),
        ('ren', _('Ren')),
        ('sheep', _('Sheep')),
        ('small', _('Small Cow')),
        ('stegosaurus', _('Stegosaurus')),
        ('stimpy', _('Stimpy')),
        ('supermilker', _('Super Milker')),
        ('three-eyes', _('Three Eyes')),
        ('turkey', _('Turkey')),
        ('turtle', _('Turtle')),
        ('tux', _('Tux')),
        ('udder', _('Udder')),
        ('vader-koala', _('Vader Koala')),
        ('vader', _('Vader')),
        ('www', _('WWW')),
    ],
    default='default',
    label=_('Cow Selection'),
    help_text=_('Select which cow to use with cowsay when running jobs.'),
    category=_('Cows'),
    # Optional; category_slug will be slugified version of category if not
    # explicitly provided.
    category_slug='cows',
)


def _get_read_only_ansible_cow_selection_default():
    return getattr(settings, 'ANSIBLE_COW_SELECTION', 'No default cow!')


register(
    'READONLY_ANSIBLE_COW_SELECTION',
    field_class=fields.CharField,
    # read_only must be set via kwargs even if field_class sets it.
    read_only=True,
    # default can be a callable to dynamically compute the value; should be in
    # the plain JSON format stored in the DB and used in the API.
    default=_get_read_only_ansible_cow_selection_default,
    label=_('Example Read-Only Setting'),
    help_text=_('Example setting that cannot be changed.'),
    category=_('Cows'),
    category_slug='cows',
    # Optional; list of other settings this read-only setting depends on. When
    # the other settings change, the cached value for this setting will be
    # cleared to require it to be recomputed.
    depends_on=['ANSIBLE_COW_SELECTION'],
    # Optional; licensed feature required to be able to view or modify this
    # setting.
    feature_required='rebranding',
    # Optional; field is stored encrypted in the database and only $encrypted$
    # is returned via the API.
    encrypted=True,
)

register(
    'EXAMPLE_USER_SETTING',
    field_class=fields.CharField,
    allow_blank=True,
    label=_('Example Setting'),
    help_text=_('Example setting which can be different for each user.'),
    category=_('User'),
    category_slug='user',
    default='',
)

# Unregister the example settings above.
settings_registry.unregister('ANSIBLE_COW_SELECTION')
settings_registry.unregister('READONLY_ANSIBLE_COW_SELECTION')
settings_registry.unregister('EXAMPLE_USER_SETTING')
