# Copyright 2016 Hangzhou H3C Technologies Co. Ltd. All rights reserved.
#
#  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 neutron_lib.api import extensions

PORTEXTENSIONS = 'port_extensions'
EXTENDED_ATTRIBUTES_2_0 = {
    'ports': {
        PORTEXTENSIONS: {
            'allow_post': True,
            'allow_put': True,
            'default': None,
            'enforce_policy': True,
            'is_visible': True,
            'validate': {
                'type:dict_or_nodata': {
                    'actiontype': {'type:string': None, 'required': False},
                    'host_ip': {'type:string': None, 'required': False},
                    'vtepIp': {'type:string': None, 'required': False},
                    'domain': {'type:string': None, 'required': False},
                    'virt_type': {'type:string': None, 'required': False}
                }
            }
        }
    }
}


class Portextensions(extensions.ExtensionDescriptor):
    """Extension class supporting port extensions."""

    @classmethod
    def get_name(cls):
        return "Port Extensions"

    @classmethod
    def get_alias(cls):
        return "port-extensions"

    @classmethod
    def get_description(cls):
        return "Provides port extensions"

    @classmethod
    def get_namespace(cls):
        return "http://docs.openstack.org/ext/portextensions/api/v1.0"

    @classmethod
    def get_updated(cls):
        return "2015-01-06T10:00:00-00:00"

    def get_extended_resources(self, version):
        if version == "2.0":
            return dict(EXTENDED_ATTRIBUTES_2_0.items())
        else:
            return {}
