import { $ } from "@wdio/globals";

import AdminPage from "./admin.page.js";
import OauthForm from "./forms/oauth.form.js";

/**
 * sub page containing specific selectors and methods for a specific page
 */

class ProviderWizardView extends AdminPage {
    /**
     * define selectors using getter methods
     */

    oauth = OauthForm;

    get wizardTitle() {
        return $(">>>ak-wizard .pf-c-wizard__header h1.pf-c-title");
    }

    get providerList() {
        return $(">>>ak-provider-wizard-initial");
    }

    get nextButton() {
        return $(">>>ak-wizard footer button.pf-m-primary");
    }

    async getProviderType(type: string) {
        return await this.providerList.$(`>>>input[value="${type}"]`);
    }

    get successMessage() {
        return $('>>>[data-commit-state="success"]');
    }
}

type Pair = [string, string];

// Define a getter for each provider type in the radio button collection.

const providerValues: Pair[] = [["oauth2", "oauth2Provider"]];

providerValues.forEach(([value, name]: Pair) => {
    Object.defineProperties(ProviderWizardView.prototype, {
        [name]: {
            get: function () {
                return this.providerList.$(`>>>input[id="ak-provider-${value}-form"]`);
            },
        },
    });
});

export default new ProviderWizardView();
