#!/usr/bin/python3

import time
import composerlib
import testlib
import unittest
import os


@testlib.nondestructive
@testlib.no_retry_when_changed
class TestImageWizard(composerlib.ComposerCase):

    def _select_PF4(self, selector, value):
        b = self.browser

        b.click(f"{selector}:not([disabled]):not([aria-disabled=true])")
        select_entry = f"{selector} + ul button:contains('{value}')"
        b.click(select_entry)
        if b.is_present(f"{selector}.pf-m-typeahead"):
            b.wait_val(f"{selector} > div input[type=text]", value)
        else:
            b.wait_text(f"{selector} .pf-c-select__toggle-text", value)

    def testCreateQCOW2(self):
        b = self.browser

        self.login_and_go("/composer", superuser=True)
        b.wait_visible("#main")

        # Create blueprint
        b.click("tr[data-testid=httpd-server] button[aria-label='Create image']")
        b.wait_in_text(".pf-c-wizard__main", "httpd-server")
        time.sleep(1)
        # select qcow2 image type and keep default size
        self._select_PF4("#image-output-select-toggle", "QEMU Image (.qcow2)")
        b.click("button:contains('Next')")

        # Create image
        b.click("footer button:contains('Create')")

    @unittest.skipIf(os.environ.get("TEST_OS").split('-') != "rhel-95", "Only RHEL-9 supports GCP at this time")
    def testUploadGCPFields(self):
        b = self.browser

        self.login_and_go("/composer", superuser=True)
        b.wait_visible("#main")

        # Select create image from created blueprint
        b.click("tr[data-testid=httpd-server] button[aria-label='Create image']")
        b.wait_in_text(".pf-c-wizard__main", "httpd-server")
        time.sleep(1)
        # Google cloud platform image type and keep default size
        self._select_PF4("#image-output-select-toggle", "Google Cloud Platform (.tar.gz)")
        b.click("input[id='image.isUpload']")
        b.click("button:contains('Next')")

        b.set_input_text("input[id='image.upload.image_name']", "testImageName")
        b.set_input_text("input[id='image.upload.settings.region']", "testStorageName")
        b.set_input_text("input[id='image.upload.settings.bucket']", "testBucket")
        b.wait_in_text(".pf-c-wizard__main-body", "Credentials")

        # Cancel upload
        b.click("footer button:contains('Cancel')")


if __name__ == '__main__':
    testlib.test_main()
