#    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.

import random

import pytest
from selenium.webdriver.common.by import By

from openstack_dashboard.test.selenium import widgets


@pytest.fixture
def default_compute_quotas(openstack_admin):
    default_quotas = openstack_admin.compute.get(
        "/os-quota-class-sets/default").json()
    yield None
    openstack_admin.compute.put(
        "/os-quota-class-sets/default",
        json={"quota_class_set":
              {"cores": default_quotas["quota_class_set"]["cores"],
               "instances": default_quotas["quota_class_set"]["instances"],
               }
              })


@pytest.fixture
def default_volume_quotas(openstack_admin):
    default_quotas = openstack_admin.block_storage.get(
        "/os-quota-class-sets/default").json()
    yield None
    openstack_admin.block_storage.put(
        "/os-quota-class-sets/default",
        json={"quota_class_set":
              {"volumes": default_quotas["quota_class_set"]["volumes"],
               "snapshots": default_quotas["quota_class_set"]["snapshots"]
               }
              })


def test_update_compute_defaults(login, driver, openstack_admin, config,
                                 default_compute_quotas):
    number_of_instances = random.randint(101, 10001)
    number_of_cores = random.randint(101, 10001)
    login('admin')
    url = '/'.join((
        config.dashboard.dashboard_url,
        'admin',
        'defaults',
    ))
    driver.get(url)
    driver.find_element(By.LINK_TEXT, "Update Default Quotas").click()
    defaults_form = driver.find_element(By.CSS_SELECTOR, "form .modal-content")
    defaults_form.find_element(By.ID, "id_instances").clear()
    defaults_form.find_element(By.ID, "id_instances").send_keys(
        number_of_instances)
    defaults_form.find_element(By.ID, "id_cores").clear()
    defaults_form.find_element(By.ID, "id_cores").send_keys(number_of_cores)
    defaults_form.find_element(By.CSS_SELECTOR, ".btn-primary").click()
    messages = widgets.get_and_dismiss_messages(driver, config)
    assert 'Success: Default quotas updated.' in messages
    new_quotas = openstack_admin.compute.get(
        "/os-quota-class-sets/default").json()
    assert (
        new_quotas["quota_class_set"]["instances"] == number_of_instances and
        new_quotas["quota_class_set"]["cores"] == number_of_cores)


def test_update_volume_defaults(login, driver, openstack_admin, config,
                                default_volume_quotas):
    number_of_volumes = random.randint(101, 10001)
    number_of_snapshots = random.randint(101, 10001)
    login('admin')
    url = '/'.join((
        config.dashboard.dashboard_url,
        'admin',
        'defaults',
    ))
    driver.get(url)
    driver.find_element(By.LINK_TEXT, "Volume Quotas").click()
    driver.find_element(By.LINK_TEXT, "Update Default Quotas").click()
    defaults_form = driver.find_element(By.CSS_SELECTOR, "form .modal-content")
    defaults_form.find_element(By.ID, "id_volumes").clear()
    defaults_form.find_element(By.ID, "id_volumes").send_keys(number_of_volumes)
    defaults_form.find_element(By.ID, "id_snapshots").clear()
    defaults_form.find_element(By.ID, "id_snapshots").send_keys(
        number_of_snapshots)
    defaults_form.find_element(By.CSS_SELECTOR, ".btn-primary").click()
    messages = widgets.get_and_dismiss_messages(driver, config)
    assert 'Success: Default quotas updated.' in messages
    new_quotas = openstack_admin.block_storage.get(
        "/os-quota-class-sets/default").json()
    assert (new_quotas["quota_class_set"]["volumes"] == number_of_volumes and
            new_quotas["quota_class_set"]["snapshots"] == number_of_snapshots)
