#    Copyright 2015 Rackspace
#
#    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.


class MockNovaInterface(object):
    net_id = None
    port_id = None
    fixed_ips = []

MOCK_NETWORK_ID = 'mock-network-1'
MOCK_NETWORK_ID2 = 'mock-network-2'
MOCK_NETWORK_NAME = 'TestNet1'
MOCK_SUBNET_ID = 'mock-subnet-1'
MOCK_SUBNET_ID2 = 'mock-subnet-2'
MOCK_SUBNET_NAME = 'TestSubnet1'
MOCK_PORT_ID = 'mock-port-1'
MOCK_PORT_ID2 = 'mock-port-2'
MOCK_PORT_NAME = 'TestPort1'
MOCK_PORT_NAME2 = 'TestPort2'
MOCK_COMPUTE_ID = 'mock-compute-1'
MOCK_IP_ADDRESS = '10.0.0.1'
MOCK_IP_ADDRESS2 = '10.0.0.2'
MOCK_GATEWAY_IP = '10.0.0.3'
MOCK_IP_VERSION = 4
MOCK_CIDR = '10.0.0.0/24'
MOCK_MAC_ADDR = 'fe:16:3e:00:95:5c'
MOCK_MAC_ADDR2 = 'fe:16:3e:00:95:5d'
MOCK_PROJECT_ID = 'mock-project-1'
MOCK_HOST_ROUTES = []
MOCK_SUBNET = {'subnet': {'id': MOCK_SUBNET_ID,
                          'network_id': MOCK_NETWORK_ID,
                          'name': MOCK_SUBNET_NAME,
                          'tenant_id': MOCK_PROJECT_ID,
                          'gateway_ip': MOCK_GATEWAY_IP,
                          'cidr': MOCK_CIDR,
                          'ip_version': MOCK_IP_VERSION,
                          'host_routes': MOCK_HOST_ROUTES}}
MOCK_SUBNET2 = {'subnet': {'id': MOCK_SUBNET_ID2,
                           'network_id': MOCK_NETWORK_ID2}}
MOCK_HOST_ROUTES = []

MOCK_NOVA_INTERFACE = MockNovaInterface()
MOCK_NOVA_INTERFACE.net_id = MOCK_NETWORK_ID
MOCK_NOVA_INTERFACE.port_id = MOCK_PORT_ID
MOCK_NOVA_INTERFACE.fixed_ips = [{'ip_address': MOCK_IP_ADDRESS}]
MOCK_NOVA_INTERFACE2 = MockNovaInterface()
MOCK_NOVA_INTERFACE2.net_id = MOCK_NETWORK_ID2
MOCK_NOVA_INTERFACE2.port_id = MOCK_PORT_ID2
MOCK_NOVA_INTERFACE2.fixed_ips = [{'ip_address': MOCK_IP_ADDRESS2}]
MOCK_DEVICE_OWNER = 'Moctavia'
MOCK_DEVICE_ID = 'Moctavia123'
MOCK_DEVICE_ID2 = 'Moctavia124'
MOCK_SECURITY_GROUP_ID = 'security-group-1'
MOCK_SECURITY_GROUP_NAME = 'SecurityGroup1'

MOCK_ADMIN_STATE_UP = True
MOCK_STATUS = 'ACTIVE'
MOCK_MTU = 1500
MOCK_NETWORK_TYPE = 'flat'
MOCK_SEGMENTATION_ID = 1
MOCK_ROUTER_EXTERNAL = False

MOCK_NEUTRON_PORT = {'port': {'network_id': MOCK_NETWORK_ID,
                              'device_id': MOCK_DEVICE_ID,
                              'device_owner': MOCK_DEVICE_OWNER,
                              'id': MOCK_PORT_ID,
                              'name': MOCK_PORT_NAME,
                              'tenant_id': MOCK_PROJECT_ID,
                              'admin_state_up': MOCK_ADMIN_STATE_UP,
                              'status': MOCK_STATUS,
                              'mac_address': MOCK_MAC_ADDR,
                              'fixed_ips': [{'ip_address': MOCK_IP_ADDRESS,
                                             'subnet_id': MOCK_SUBNET_ID}],
                              'security_groups': [MOCK_SECURITY_GROUP_ID]}}
MOCK_NEUTRON_QOS_POLICY_ID = 'mock-qos-id'
MOCK_QOS_POLICY_ID1 = 'qos1-id'
MOCK_QOS_POLICY_ID2 = 'qos2-id'

MOCK_NEUTRON_PORT2 = {'port': {'network_id': MOCK_NETWORK_ID2,
                               'device_id': MOCK_DEVICE_ID2,
                               'device_owner': MOCK_DEVICE_OWNER,
                               'id': MOCK_PORT_ID2,
                               'name': MOCK_PORT_NAME2,
                               'tenant_id': MOCK_PROJECT_ID,
                               'admin_state_up': MOCK_ADMIN_STATE_UP,
                               'status': MOCK_STATUS,
                               'mac_address': MOCK_MAC_ADDR2,
                               'fixed_ips': [{'ip_address': MOCK_IP_ADDRESS2,
                                              'subnet_id': MOCK_SUBNET_ID2}]}}

MOCK_NETWORK = {'network': {'id': MOCK_NETWORK_ID,
                            'name': MOCK_NETWORK_NAME,
                            'tenant_id': MOCK_PROJECT_ID,
                            'admin_state_up': MOCK_ADMIN_STATE_UP,
                            'subnets': [MOCK_SUBNET_ID],
                            'mtu': MOCK_MTU,
                            'provider:network_type': 'flat',
                            'provider:physical_network': MOCK_NETWORK_NAME,
                            'provider:segmentation_id': MOCK_SEGMENTATION_ID,
                            'router:external': MOCK_ROUTER_EXTERNAL}}
MOCK_FIXED_IP = {'fixed_ip': {'subnet_id': MOCK_SUBNET_ID,
                              'ip_address': MOCK_IP_ADDRESS}}
MOCK_FLOATING_IP_ID = 'floating-ip-1'
MOCK_FLOATING_IP_DESC = 'TestFloatingIP1'
MOCK_ROUTER_ID = 'mock-router-1'
MOCK_FLOATING_IP = {'floatingip': {'id': MOCK_FLOATING_IP_ID,
                                   'description': MOCK_FLOATING_IP_DESC,
                                   'tenant_id': MOCK_PROJECT_ID,
                                   'status': MOCK_STATUS,
                                   'port_id': MOCK_PORT_ID,
                                   'router_id': MOCK_ROUTER_ID,
                                   'floating_network_id': MOCK_NETWORK_ID,
                                   'floating_ip_address': MOCK_IP_ADDRESS,
                                   'fixed_ip_address': MOCK_IP_ADDRESS2,
                                   'fixed_port_id': MOCK_PORT_ID2}}

MOCK_AMP_ID1 = 'amp1-id'
MOCK_AMP_ID2 = 'amp2-id'
MOCK_AMP_COMPUTE_ID1 = 'amp1-compute-id'
MOCK_AMP_COMPUTE_ID2 = 'amp2-compute-id'

MOCK_MANAGEMENT_SUBNET_ID = 'mgmt-subnet-1'
MOCK_MANAGEMENT_NET_ID = 'mgmt-net-1'
MOCK_MANAGEMENT_PORT_ID1 = 'mgmt-port-1'
MOCK_MANAGEMENT_PORT_ID2 = 'mgmt-port-2'
# These IPs become lb_network_ip
MOCK_MANAGEMENT_IP1 = '99.99.99.1'
MOCK_MANAGEMENT_IP2 = '99.99.99.2'

MOCK_MANAGEMENT_FIXED_IPS1 = [{'ip_address': MOCK_MANAGEMENT_IP1,
                               'subnet_id': MOCK_MANAGEMENT_SUBNET_ID}]
MOCK_MANAGEMENT_FIXED_IPS2 = [{'ip_address': MOCK_MANAGEMENT_IP2,
                               'subnet_id': MOCK_MANAGEMENT_SUBNET_ID}]

MOCK_MANAGEMENT_INTERFACE1 = MockNovaInterface()
MOCK_MANAGEMENT_INTERFACE1.net_id = MOCK_MANAGEMENT_NET_ID
MOCK_MANAGEMENT_INTERFACE1.port_id = MOCK_MANAGEMENT_PORT_ID1
MOCK_MANAGEMENT_INTERFACE1.fixed_ips = MOCK_MANAGEMENT_FIXED_IPS1
MOCK_MANAGEMENT_INTERFACE2 = MockNovaInterface()
MOCK_MANAGEMENT_INTERFACE2.net_id = MOCK_MANAGEMENT_NET_ID
MOCK_MANAGEMENT_INTERFACE2.port_id = MOCK_MANAGEMENT_PORT_ID2
MOCK_MANAGEMENT_INTERFACE2.fixed_ips = MOCK_MANAGEMENT_FIXED_IPS2

MOCK_MANAGEMENT_PORT1 = {'port': {'network_id': MOCK_MANAGEMENT_NET_ID,
                                  'device_id': MOCK_AMP_COMPUTE_ID1,
                                  'device_owner': MOCK_DEVICE_OWNER,
                                  'id': MOCK_MANAGEMENT_PORT_ID1,
                                  'fixed_ips': MOCK_MANAGEMENT_FIXED_IPS1}}

MOCK_MANAGEMENT_PORT2 = {'port': {'network_id': MOCK_MANAGEMENT_NET_ID,
                                  'device_id': MOCK_AMP_COMPUTE_ID2,
                                  'device_owner': MOCK_DEVICE_OWNER,
                                  'id': MOCK_MANAGEMENT_PORT_ID2,
                                  'fixed_ips': MOCK_MANAGEMENT_FIXED_IPS2}}

MOCK_VIP_SUBNET_ID = 'vip-subnet-1'
MOCK_VIP_NET_ID = 'vip-net-1'
MOCK_VRRP_PORT_ID1 = 'vrrp-port-1'
MOCK_VRRP_PORT_ID2 = 'vrrp-port-2'
# These IPs become vrrp_ip
MOCK_VRRP_IP1 = '55.55.55.1'
MOCK_VRRP_IP2 = '55.55.55.2'

MOCK_VRRP_FIXED_IPS1 = [{'ip_address': MOCK_VRRP_IP1,
                         'subnet_id': MOCK_VIP_SUBNET_ID}]
MOCK_VRRP_FIXED_IPS2 = [{'ip_address': MOCK_VRRP_IP2,
                         'subnet_id': MOCK_VIP_SUBNET_ID}]

MOCK_VRRP_INTERFACE1 = MockNovaInterface()
MOCK_VRRP_INTERFACE1.net_id = MOCK_VIP_NET_ID
MOCK_VRRP_INTERFACE1.port_id = MOCK_VRRP_PORT_ID1
MOCK_VRRP_INTERFACE1.fixed_ips = MOCK_VRRP_FIXED_IPS1
MOCK_VRRP_INTERFACE2 = MockNovaInterface()
MOCK_VRRP_INTERFACE2.net_id = MOCK_VIP_NET_ID
MOCK_VRRP_INTERFACE2.port_id = MOCK_VRRP_PORT_ID2
MOCK_VRRP_INTERFACE2.fixed_ips = MOCK_VRRP_FIXED_IPS2

MOCK_VRRP_PORT1 = {'port': {'network_id': MOCK_VIP_NET_ID,
                            'device_id': MOCK_AMP_COMPUTE_ID1,
                            'device_owner': MOCK_DEVICE_OWNER,
                            'id': MOCK_VRRP_PORT_ID1,
                            'fixed_ips': MOCK_VRRP_FIXED_IPS1}}

MOCK_VRRP_PORT2 = {'port': {'network_id': MOCK_VIP_NET_ID,
                            'device_id': MOCK_AMP_COMPUTE_ID2,
                            'device_owner': MOCK_DEVICE_OWNER,
                            'id': MOCK_VRRP_PORT_ID2,
                            'fixed_ips': MOCK_VRRP_FIXED_IPS2}}
