# Copyright 2014 Embrane, Inc.
# 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.
#
# @author:  Ivar Lazzaro, Embrane, Inc. ivar@embrane.com

import neutron.db.api as db
from neutron.db import models_v2 as nmodel
from neutron.services.loadbalancer.drivers.embrane import models


def initialize():
    db.configure_db()


def add_pool_port(context, pool_id, port_id):
    session = context.session
    with session.begin(subtransactions=True):
        pool_port = models.PoolPort()
        pool_port.pool_id = pool_id
        pool_port.port_id = port_id
        session.add(pool_port)


def get_pool_port(context, pool_id):
    return (context.session.query(models.PoolPort).filter_by(pool_id=pool_id).
            first())


def delete_pool_backend(context, pool_id):
    session = context.session
    backend = (session.query(models.PoolPort).filter_by(
        pool_id=pool_id))
    for b in backend:
        delete_pool_port(context, b)


def delete_pool_port(context, backend_port):
    session = context.session
    with session.begin(subtransactions=True):
        port = (session.query(nmodel.Port).filter_by(
            id=backend_port['port_id'])).first()
        if port:
            session.delete(backend_port)
            session.delete(port)
