# TODO: Temporarily disabled due to importing old code into openshift-ansible
# repo. We will work on these over time.
# pylint: disable=bad-continuation,missing-docstring,no-self-use,invalid-name,too-few-public-methods

"""
Defines the supported variants and versions the installer supports, and metadata
required to run Ansible correctly.

This module needs to be updated for each major release to allow the new version
to be specified by the user, and to point the generic variants to the latest
version.
"""

import logging
installer_log = logging.getLogger('installer')


class Version(object):
    def __init__(self, name, ansible_key, subtype=''):
        self.name = name  # i.e. 3.0, 3.1

        self.ansible_key = ansible_key
        self.subtype = subtype


class Variant(object):
    def __init__(self, name, description, versions):
        # Supported variant name:
        self.name = name

        # Friendly name for the variant:
        self.description = description

        self.versions = versions

    def latest_version(self):
        return self.versions[0]


# WARNING: Keep the versions ordered, most recent first:
OSE = Variant('openshift-enterprise', 'OpenShift Container Platform', [
    Version('3.4', 'openshift-enterprise'),
])

REG = Variant('openshift-enterprise', 'Registry', [
    Version('3.4', 'openshift-enterprise', 'registry'),
])

origin = Variant('origin', 'OpenShift Origin', [
    Version('1.4', 'origin'),
])

LEGACY = Variant('openshift-enterprise', 'OpenShift Container Platform', [
    Version('3.3', 'openshift-enterprise'),
    Version('3.2', 'openshift-enterprise'),
    Version('3.1', 'openshift-enterprise'),
    Version('3.0', 'openshift-enterprise'),
])

# Ordered list of variants we can install, first is the default.
SUPPORTED_VARIANTS = (OSE, REG, origin, LEGACY)
DISPLAY_VARIANTS = (OSE, REG,)


def find_variant(name, version=None):
    """
    Locate the variant object for the variant given in config file, and
    the correct version to use for it.
    Return (None, None) if we can't find a match.
    """
    prod = None
    for prod in SUPPORTED_VARIANTS:
        if prod.name == name:
            if version is None:
                return (prod, prod.latest_version())
            for v in prod.versions:
                if v.name == version:
                    return (prod, v)

    return (None, None)


def get_variant_version_combos():
    combos = []
    for variant in DISPLAY_VARIANTS:
        for ver in variant.versions:
            combos.append((variant, ver))
    return combos
