<!doctype html>
<html>
    <head>
        <!-- prettier-ignore -->
        {%- auth0:head -%}
        <title>{{ prompt.screen.texts.title }}</title>
        <script
            src="https://cdn.theorchard.io/jquery/jquery-3.7.1.slim.min.js"
        ></script>
        <link
            rel="shortcut icon"
            href="{{ organization.branding.logo_url }}"
            sizes="32x32"
            type="image/png"
        >
        <style>
            #cert-badge {
                position: fixed;
                bottom: 40px;
                right: 40px;
                z-index: 9999;
            }
        </style>
    </head>
    <body class="_widget-auto-layout">
        <!-- prettier-ignore -->
        {%- auth0:widget -%}

        {% comment %}INTERNATIONALIZATION_PLACEHOLDER{% endcomment %}
        {% comment %}DOMAIN_UTILS_PLACEHOLDER{% endcomment %}

        <script id="page-handler">
            // page type detection
            var appName = '{{ application.name }}';
            var appDisplayName = '{{ application.metadata.display_name }}';
            var orgName = '{{ organization.name }}';

            // Detect page type and set body ID
            const urlPageMapping = {
                '/u/login': 'login',
                '/u/login/invitation': 'login',
                '/u/signup/invitation': 'login',
                '/u/reset-verify': 'reset-password',
                '/u/reset-password/change': 'reset-password',
            };

            Object.keys(urlPageMapping).forEach(key => {
                if (window.location.pathname.includes(key)) {
                    document.body.id = urlPageMapping[key];
                }
            });

            // TODO: change the widget logo to: organization.branding.logo_url

            // Universal tagging - runs on DOM ready for ALL pages
            // TODO: move it to js-injects (and import) so we can test it properly
            function tagElementsByText(
                promptGroup,
                screenName,
                textKey,
                textValue
            ) {
                function normalizeText(text) {
                    return text.trim().toLowerCase().replace(/\s+/g, ' ');
                }

                var normalized = normalizeText(textValue);
                var id = promptGroup + '_' + screenName + '_' + textKey;

                if (document.getElementById(id)) return;

                var elements = document.querySelectorAll(
                    'p, span, a, button, h1, h2, h3, label'
                );
                for (var i = 0; i < elements.length; i++) {
                    var el = elements[i];
                    if (el.id) continue;

                    var elText = normalizeText(el.textContent || '');

                    if (elText === normalized) {
                        el.id = id;
                        return;
                    }
                }
            }

            function tagWidgetItemsWithIds() {
                var locale = window.currentLocale;
                if (!window.customTexts || !locale) {
                    return;
                }

                var localeTexts = window.customTexts[locale];
                if (!localeTexts) {
                    return;
                }

                for (var promptGroup in localeTexts) {
                    var screens = localeTexts[promptGroup];
                    for (var screenName in screens) {
                        var textKeys = screens[screenName];
                        for (var textKey in textKeys) {
                            var textValue = textKeys[textKey];
                            if (
                                typeof textValue === 'string' &&
                                textValue.trim()
                            ) {
                                tagElementsByText(
                                    promptGroup,
                                    screenName,
                                    textKey,
                                    textValue
                                );
                            }
                        }
                    }
                }
            }

            $(function () {
                tagWidgetItemsWithIds();
            });
        </script>

        <script id="reset-observer">
            function getResetPasswordResultUrl(appName, orgName) {
                var orchardUser = orgName === 'orchard';
                var smeUser = orgName === 'sme';
                var awalUser = orgName === 'awal';
                var knrUser = orgName === 'knr';

                switch (appName) {
                    case 'podcast-login':
                        if (smeUser) return '##PODCAST_SONY_URL##/podcasts/1';
                        return '##PODCAST_ORCHARD_URL##/podcasts/1';
                    case 'orchadmin-login':
                        return '##ORCHADMIN_URL##/resetPassword.php';
                    case 'collaborators-login':
                        if (awalUser) return '##COLLABORATORS_AWAL_URL##';
                        return '##COLLABORATORS_URL##';
                    case 'insights-login':
                        if (awalUser) return '##INSIGHTS_AWAL_URL##';
                        if (smeUser) return '##INSIGHTS_SME_URL##';
                        return '##INSIGHTS_URL##';
                    case 'moneyhub-login':
                        if (awalUser) return '##MONEYHUB_AWAL_URL##';
                        if (knrUser) return '##MONEYHUB_KNR_URL##';
                        return '##MONEYHUB_URL##';
                    case 'audience-login':
                        if (awalUser) return '##AUDIENCE_AWAL_URL##';
                        if (smeUser) return '##AUDIENCE_SME_URL##';
                        return '##AUDIENCE_URL##';
                    default:
                        // settings and no-specific-map defaults to settings
                        if (awalUser) return '##SETTINGS_AWAL_URL##';
                        if (knrUser) return '##SETTINGS_KNR_URL##';
                        if (smeUser) return '##SETTINGS_SME_URL##';
                        return '##SETTINGS_URL##';
                }
            }

            $(function () {
                // reset-password page specific logic, skip if not applicable
                if (document.body.id === 'reset-password') {
                    var hashParams = new URLSearchParams(
                        window.location.hash.slice(1)
                    );
                    var linkOrgName = hashParams.get('organization') || orgName;

                    // Patch the return link on the success page
                    var link = document.getElementById(
                        'reset-password_reset-password-success_buttonText'
                    );
                    if (link) {
                        const resultUrl = getResetPasswordResultUrl(
                            appName,
                            linkOrgName
                        );
                        link.href = resultUrl;
                    }
                }
            });
        </script>

        <script id="login-observer">
            $(function () {
                // Login page specific logic, skip if not applicable
                if (document.body.id !== 'login') return;

                var usernameFieldExist = $('#username').length;
                var isOrchAdminApp = appName == 'orchadmin-login';
                var isSolfegeApp = appName == 'solfege-login';
                var isPodcastApp = appName == 'podcast-login';
                var isSeatApp = appName == 'seat-login';
                var isProd = '##ENV##' === 'prod';

                $('#login_login_footerText').hide();
                $('button[data-provider="google"]').hide();
                $('button[data-provider="google-apps"]').hide();
                $('button[data-provider="waad"]').hide();
                $('#login_login_separatorText').parent().hide();

                // Email validation functions (isGoogleTenantEmail, isSonyEmail) are injected at prebuild
                $('#username').on('change keyup', function () {
                    var hasGoogleTenantEmail = isGoogleTenantEmail(
                        $('#username').val()
                    );
                    var hasSonyEmail = isSonyEmail($('#username').val());
                    var googleLoginExists =
                        $('button[data-provider="google"]').length ||
                        $('button[data-provider="google-apps"]').length;
                    var sonyLoginExists = $(
                        'button[data-provider="waad"]'
                    ).length;
                    var loginTypes = $('input[name="connection"]')
                        .map(function () {
                            return $(this).val();
                        })
                        .get();
                    var googleLoginOK =
                        googleLoginExists &&
                        (loginTypes.includes('theorchard-gsuite') ||
                            appName == 'orchard-zendesk');
                    var sonyLoginOK =
                        sonyLoginExists &&
                        loginTypes.includes('sme-prod-orchadmin') &&
                        !isPodcastApp;

                    if (hasGoogleTenantEmail && googleLoginOK) {
                        $('.password').hide();
                        $('#login_login_buttonText').hide();
                        $('button[data-provider="google"]').show();
                        $('button[data-provider="google-apps"]').show();
                        $('button[data-provider="waad"]').hide();
                        $('#login_login_forgotPasswordText').hide();

                        if (isSolfegeApp) {
                            $('button[data-provider="google"]').hide();
                        }
                    } else if (hasSonyEmail && sonyLoginOK) {
                        $('.password').hide();
                        $('#login_login_buttonText').hide();
                        $('button[data-provider="google"]').hide();
                        $('button[data-provider="google-apps"]').hide();
                        $('button[data-provider="waad"]').show();
                        $('#login_login_forgotPasswordText').hide();
                    } else {
                        $('.password').show();
                        $('#login_login_buttonText').show();
                        $('button[data-provider="google"]').hide();
                        $('button[data-provider="google-apps"]').hide();
                        $('button[data-provider="waad"]').hide();
                        $('#login_login_forgotPasswordText').show();
                    }
                });

                // Show only SSO buttons when: seat in prod (force it even if an org
                // db connection renders a username field), or seat/orchadmin on a
                // button-only page (no username field). Else the user/pass form stays.
                if (
                    (isSeatApp && (isProd || !usernameFieldExist)) ||
                    (isOrchAdminApp && !usernameFieldExist)
                ) {
                    $('#username').hide();
                    $('.password').hide();
                    $('#login_login_buttonText').hide();
                    $('button[data-provider="google"]').show();
                    $('button[data-provider="google-apps"]').show();
                    $('button[data-provider="waad"]').show();
                    $('#login_login_forgotPasswordText').hide();
                    $('.input-wrapper').hide();
                }

                // TODO add condition org === 'knr' when link for knr will be available
                if (orgName === 'awal') {
                    const el = $('#error-element-password');

                    if (el.length) {
                        const aTag = document.createElement('a');
                        aTag.innerText = 'Click here';
                        let link =
                            'https://awal-support.zendesk.com/hc/en-us/articles/10272282243475-The-Old-AWAL-Portal-The-New-AWAL-Workstation';

                        //TODO add correct link for knr
                        // if(org === 'knr'){
                        //     link = 'https://kollectivenr.com';
                        // }

                        aTag.href = link;
                        aTag.target = '_blank';

                        el.find(':first-child').remove();
                        el.append(
                            "<br>Heads up! We've moved. Having trouble logging in?"
                        );
                        el.css('margin-bottom', function () {
                            return 0;
                        });
                        el.after(aTag);
                    }
                }

                function updateAppNameInContent() {
                    if (!appDisplayName || appDisplayName === appName) return;
                    const rSearch = new RegExp(appName, 'g');

                    // Lookup all elements that may contain the app name and replace
                    document
                        .querySelectorAll(
                            'h1, h2, h3, h4, h5, p, span, label, a, button'
                        )
                        .forEach(function (element) {
                            if (!element.childNodes.length) return;

                            // Check each text node within the element
                            Array.from(element.childNodes).forEach(function (
                                node
                            ) {
                                if (node.nodeType === 3) {
                                    // Text node type
                                    // Replace app name with display name
                                    if (node.textContent.includes(appName)) {
                                        node.textContent =
                                            node.textContent.replace(
                                                rSearch,
                                                appDisplayName
                                            );
                                    }
                                }
                            });
                        });

                    // Also update the page title
                    if (document.title.includes(appName)) {
                        document.title = document.title.replace(
                            rSearch,
                            appDisplayName
                        );
                    }
                }
                updateAppNameInContent();
            });
        </script>
        <iframe
            id="cert-badge"
            src="https://registry.blockmarktech.com/certificates/08be7bd0-a66f-4e51-8e8c-14981c98f8a8/widget/?tooltip_position=bottom_right&theme=transparent&non_padded=t&hover=t"
            style="border: none; height: 72px; width: 60px"
        ></iframe>
    </body>
</html>
