jQuery(document).ready(function ($) {
    const features = [
        ["seopress_titles", "seopress_titles_home"],
        ["seopress_xml_sitemap_tab", "seopress_xml_sitemap_general"],
        ["seopress_social_tab", "seopress_social_knowledge"],
        ["seopress_advanced_tab", "seopress_advanced_image"],
        ["seopress_google_analytics_enable", "seopress_google_analytics_enable"],
        ["seopress_tool_settings", "seopress_tool_settings"],
        ["seopress_instant_indexing_general", "seopress_instant_indexing_general"]
    ];

    features.forEach(function (item) {
        var hash = $(location).attr("hash").split("#tab=")[1];

        if (typeof hash != "undefined") {
            $("#" + hash + "-tab").addClass("nav-tab-active");
            $("#" + hash).addClass("active");
        } else {
            if (
                typeof sessionStorage != "undefined" &&
                typeof sessionStorage != "null"
            ) {
                var seopress_tab_session_storage =
                    sessionStorage.getItem("seopress_save_tab");

                if (
                    seopress_tab_session_storage &&
                    $("#" + seopress_tab_session_storage + "-tab").length
                ) {
                    $("#seopress-tabs")
                        .find(".nav-tab.nav-tab-active")
                        .removeClass("nav-tab-active");
                    $("#seopress-tabs")
                        .find(".seopress-tab.active")
                        .removeClass("active");

                    $("#" + seopress_tab_session_storage + "-tab").addClass(
                        "nav-tab-active"
                    );
                    $("#" + seopress_tab_session_storage).addClass("active");
                } else {
                    //Default TAB
                    $("#tab_" + item[1] + "-tab").addClass("nav-tab-active");
                    $("#tab_" + item[1]).addClass("active");
                }
            }

            $("#seopress-tabs")
                .find("a.nav-tab")
                .click(function (e) {
                    e.preventDefault();
                    var hash = $(this).attr("href").split("#tab=")[1];

                    $("#seopress-tabs")
                        .find(".nav-tab.nav-tab-active")
                        .removeClass("nav-tab-active");
                    $("#" + hash + "-tab").addClass("nav-tab-active");

                    sessionStorage.setItem("seopress_save_tab", hash);

                    $("#seopress-tabs")
                        .find(".seopress-tab.active")
                        .removeClass("active");
                    $("#" + hash).addClass("active");

                    if ($('#' + hash).find('.CodeMirror-wrap').length) {
                        $('#' + hash).find('.CodeMirror-wrap').each(function () {
                            // Check if CodeMirror is already attached to this textarea
                            var textarea = $(this).prev('textarea').get(0); // Get the first matching textarea element
                            $(this).remove();
                            var settings = wp.codeEditor.defaultSettings ? _.clone(wp.codeEditor.defaultSettings) : {};

                            settings.codemirror.mode = 'text/html';
                            if (textarea.id === 'seopress_instant_indexing_google_api_key') {
                                settings.codemirror.mode = 'application/json';
                            }

                            wp.codeEditor.initialize(textarea, settings);
                        });
                    }
                });
        }
    });

    function sp_get_field_length(e) {
        if (!e || !e.length) {
            return '';
        }
        if (e.val().length > 0) {
            meta = e.val() + " ";
        } else {
            meta = e.val();
        }
        return meta;
    }

    let alreadyBind = false;

    // Home Binding
    $("#seopress-tag-site-title").click(function () {
        $("#seopress_titles_home_site_title").val(
            sp_get_field_length($("#seopress_titles_home_site_title")) +
            $("#seopress-tag-site-title").attr("data-tag")
        );
    });

    $("#seopress-tag-site-desc").click(function () {
        $("#seopress_titles_home_site_title").val(
            sp_get_field_length($("#seopress_titles_home_site_title")) +
            $("#seopress-tag-site-desc").attr("data-tag")
        );
    });
    $("#seopress-tag-site-sep").click(function () {
        $("#seopress_titles_home_site_title").val(
            sp_get_field_length($("#seopress_titles_home_site_title")) +
            $("#seopress-tag-site-sep").attr("data-tag")
        );
    });

    $("#seopress-tag-meta-desc").click(function () {
        $("#seopress_titles_home_site_desc").val(
            sp_get_field_length($("#seopress_titles_home_site_desc")) +
            $("#seopress-tag-meta-desc").attr("data-tag")
        );
    });

    //Author
    $("#seopress-tag-post-author").click(function () {
        $("#seopress_titles_archive_post_author").val(
            sp_get_field_length($("#seopress_titles_archive_post_author")) +
            $("#seopress-tag-post-author").attr("data-tag")
        );
    });
    $("#seopress-tag-sep-author").click(function () {
        $("#seopress_titles_archive_post_author").val(
            sp_get_field_length($("#seopress_titles_archive_post_author")) +
            $("#seopress-tag-sep-author").attr("data-tag")
        );
    });
    $("#seopress-tag-site-title-author").click(function () {
        $("#seopress_titles_archive_post_author").val(
            sp_get_field_length($("#seopress_titles_archive_post_author")) +
            $("#seopress-tag-site-title-author").attr("data-tag")
        );
    });
    $("#seopress-tag-author-bio").click(function () {
        $("#seopress_titles_archive_author_desc").val(
            sp_get_field_length($("#seopress_titles_archive_author_desc")) +
            $("#seopress-tag-author-bio").attr("data-tag")
        );
    });

    //Date
    $("#seopress-tag-archive-date").click(function () {
        $("#seopress_titles_archives_date_title").val(
            sp_get_field_length($("#seopress_titles_archives_date_title")) +
            $("#seopress-tag-archive-date").attr("data-tag")
        );
    });
    $("#seopress-tag-sep-date").click(function () {
        $("#seopress_titles_archives_date_title").val(
            sp_get_field_length($("#seopress_titles_archives_date_title")) +
            $("#seopress-tag-sep-date").attr("data-tag")
        );
    });
    $("#seopress-tag-site-title-date").click(function () {
        $("#seopress_titles_archives_date_title").val(
            sp_get_field_length($("#seopress_titles_archives_date_title")) +
            $("#seopress-tag-site-title-date").attr("data-tag")
        );
    });

    //Search
    $("#seopress-tag-search-keywords").click(function () {
        $("#seopress_titles_archives_search_title").val(
            sp_get_field_length($("#seopress_titles_archives_search_title")) +
            $("#seopress-tag-search-keywords").attr("data-tag")
        );
    });
    $("#seopress-tag-sep-search").click(function () {
        $("#seopress_titles_archives_search_title").val(
            sp_get_field_length($("#seopress_titles_archives_search_title")) +
            $("#seopress-tag-sep-search").attr("data-tag")
        );
    });
    $("#seopress-tag-site-title-search").click(function () {
        $("#seopress_titles_archives_search_title").val(
            sp_get_field_length($("#seopress_titles_archives_search_title")) +
            $("#seopress-tag-site-title-search").attr("data-tag")
        );
    });

    //404
    $("#seopress-tag-site-title-404").click(function () {
        $("#seopress_titles_archives_404_title").val(
            sp_get_field_length($("#seopress_titles_archives_404_title")) +
            $("#seopress-tag-site-title-404").attr("data-tag")
        );
    });
    $("#seopress-tag-sep-404").click(function () {
        $("#seopress_titles_archives_404_title").val(
            sp_get_field_length($("#seopress_titles_archives_404_title")) +
            $("#seopress-tag-sep-404").attr("data-tag")
        );
    });

    //BuddyPress
    $("#seopress-tag-post-title-bd-groups").click(function () {
        $("#seopress_titles_bp_groups_title").val(
            sp_get_field_length($("#seopress_titles_bp_groups_title")) +
            $("#seopress-tag-post-title-bd-groups").attr("data-tag")
        );
    });
    $("#seopress-tag-sep-bd-groups").click(function () {
        $("#seopress_titles_bp_groups_title").val(
            sp_get_field_length($("#seopress_titles_bp_groups_title")) +
            $("#seopress-tag-sep-bd-groups").attr("data-tag")
        );
    });
    $("#seopress-tag-site-title-bd-groups").click(function () {
        $("#seopress_titles_bp_groups_title").val(
            sp_get_field_length($("#seopress_titles_bp_groups_title")) +
            $("#seopress-tag-site-title-bd-groups").attr("data-tag")
        );
    });

    //All variables
    $(".seopress-tag-dropdown").each(function (item) {
        const input_title = $(this).parent(".wrap-tags").prev("input");
        const input_desc = $(this).parent(".wrap-tags").prev("textarea");

        const _self = $(this);

        function handleClickLi(current) {
            if (_self.hasClass("tag-title") && input_title.length) {
                input_title.val(
                    sp_get_field_length(input_title) +
                    $(current).attr("data-value")
                );
                input_title.trigger("paste");
            }
            if (_self.hasClass("tag-description") && input_desc.length) {
                input_desc.val(
                    sp_get_field_length(input_desc) +
                    $(current).attr("data-value")
                );
                input_desc.trigger("paste");
            }
        }

        // Handle dropdown toggle
        $(this).on("click", function (e) {
            e.stopPropagation();
            const dropdownList = $(this).next(".sp-wrap-tag-variables-list");
            dropdownList.toggleClass("open");

            // Add search functionality
            const searchInput = dropdownList.find(".sp-tag-variables-search-input");
            const listItems = dropdownList.find("li:not(.sp-tag-variables-search)");

            // Set up search functionality
            searchInput.off("input").on("input", function() {
                const searchTerm = $(this).val().toLowerCase();
                listItems.each(function() {
                    const text = $(this).text().toLowerCase();
                    if (text.includes(searchTerm)) {
                        $(this).show();
                    } else {
                        $(this).hide();
                    }
                });
            });

            // Set up click handlers for list items
            listItems.off("click").on("click", function (e) {
                e.preventDefault();
                e.stopPropagation();
                handleClickLi(this);
            });

            // Set up keyboard handlers for list items
            listItems.off("keyup").on("keyup", function (e) {
                if (e.keyCode === 13) {
                    e.preventDefault();
                    e.stopPropagation();
                    handleClickLi(this);
                }
            });

            function closeItem(e) {
                if (
                    $(e.target).hasClass("dashicons") ||
                    $(e.target).hasClass("seopress-tag-single-all") ||
                    $(e.target).hasClass("sp-tag-variables-search-input") ||
                    $(e.target).closest(".sp-tag-variables-search").length ||
                    $(e.target).closest("li").length
                ) {
                    return;
                }

                alreadyBind = false;
                $(document).off("click", closeItem);
                $(".sp-wrap-tag-variables-list").removeClass("open");
            }

            if (!alreadyBind) {
                alreadyBind = true;
                $(document).on("click", closeItem);
            }
        });
    });

    if ($("#seopress_titles_home_site_title").length) {
        const $ = jQuery;

        var progress = 0;
        var meta_title_placeholder = $("#seopress_titles_home_site_title").attr("placeholder");
        var initialMetaTitleVal = $("#seopress_titles_home_site_title").val();

        $("#seopress_titles_title_counters").after('<div id="seopress_titles_title_counters_val">/ 60</div>');

        function updateCounters(meta_title_val) {
            $("#seopress_titles_title_counters").css("color", "inherit");

            if (meta_title_val.length > 60) {
                $("#seopress_titles_title_counters").css("color", "red");
            }

            if (meta_title_val.length == 0 && meta_title_placeholder.length > 60) {
                $("#seopress_titles_title_counters").css("color", "red");
            }

            $("#seopress_titles_title_counters").text(meta_title_val.length);

            if (meta_title_placeholder.length) {
                progress = Math.round(meta_title_val.length / 60 * 100);
            }

            if (progress >= 100) {
                progress = 100;
            }

            $("#seopress_titles_title_counters_progress").attr("aria-valuenow", progress);
            $("#seopress_titles_title_counters_progress").text(progress + "%");
            $("#seopress_titles_title_counters_progress").css("width", progress + "%");
        }

        $("#seopress_titles_home_site_title").on("keyup paste change click", function (e) {
            var meta_title_val = $(this).val();

            if ($(".snippet-title-custom:visible").length > 0) {
                meta_title_val = $(".snippet-title-custom").text();
            } else if ($(".snippet-title:visible").length > 0) {
                meta_title_val = $(".snippet-title").text();
            } else if ($(".snippet-title-default:visible").length > 0) {
                meta_title_val = $(".snippet-title-default").text();
            }

            updateCounters(meta_title_val);
        });

        // Display character count on initial load
        updateCounters(initialMetaTitleVal);
    }

    //Instant Indexing: Display keywords counter
    if ($("#seopress_instant_indexing_manual_batch").length) {
        newLines = $('#seopress_instant_indexing_manual_batch').val().split("\n").length;
        $('#seopress_instant_indexing_url_count').text(newLines);
        var lines = 100;
        var linesUsed = $('#seopress_instant_indexing_url_count');

        if (newLines) {
            var progress = newLines;

            if (progress >= 100) {
                progress = 100;
            }

            $('#seopress_instant_indexing_url_progress').attr('aria-valuenow', progress),
                $('#seopress_instant_indexing_url_progress').text(progress + '%'),
                $('#seopress_instant_indexing_url_progress').css('width', progress + '%')
        }

        $("#seopress_instant_indexing_manual_batch").on('keyup paste change click focus mouseout', function (e) {


            newLines = $(this).val().split("\n").length;
            linesUsed.text(newLines);

            if (newLines > lines) {
                linesUsed.css('color', 'red');
            } else {
                linesUsed.css('color', '');
            }

            if (newLines) {
                var progress = newLines;
            }

            if (progress >= 100) {
                progress = 100;
            }
            $('#seopress_instant_indexing_url_progress').attr('aria-valuenow', progress),
                $('#seopress_instant_indexing_url_progress').text(progress + '%'),
                $('#seopress_instant_indexing_url_progress').css('width', progress + '%')
        });
    }


    $('#seopress_instant_indexing_google_action_include[URL_UPDATED]').is(':checked') ? true : false,
        //Instant Indexing: Batch URLs
        $('.seopress-instant-indexing-batch').on('click', function () {
            $('#seopress-tabs .spinner').css(
                "visibility",
                "visible"
            );
            $('#seopress-tabs .spinner').css(
                "float",
                "none"
            );

            $.ajax({
                method: 'POST',
                url: seopressAjaxInstantIndexingPost.seopress_instant_indexing_post,
                data: {
                    action: 'seopress_instant_indexing_post',
                    urls_to_submit: $('#seopress_instant_indexing_manual_batch').val(),
                    indexnow_api: $('#seopress_instant_indexing_bing_api_key').val(),
                    google_api: $('#seopress_instant_indexing_google_api_key').val(),
                    update_action: $('#seopress_instant_indexing_google_action_include_URL_UPDATED').is(':checked') ? 'URL_UPDATED' : false,
                    delete_action: $('#seopress_instant_indexing_google_action_include_URL_DELETED').is(':checked') ? 'URL_DELETED' : false,
                    google: $('#seopress_instant_indexing_engines_google').is(':checked') ? true : false,
                    bing: $('#seopress_instant_indexing_engines_bing').is(':checked') ? true : false,
                    automatic_submission: $('#seopress_instant_indexing_automate_submission').is(':checked') ? true : false,
                    _ajax_nonce: seopressAjaxInstantIndexingPost.seopress_nonce,
                },
                success: function (data) {
                    window.location.reload(true);
                },
            });
        });

    //Instant Indexing: refresh API Key
    $('.seopress-instant-indexing-refresh-api-key').on('click', function () {
        $.ajax({
            method: 'POST',
            url: seopressAjaxInstantIndexingApiKey.seopress_instant_indexing_generate_api_key,
            data: {
                action: 'seopress_instant_indexing_generate_api_key',
                _ajax_nonce: seopressAjaxInstantIndexingApiKey.seopress_nonce,
            },
            success: function (success) {
                if (success.success === true) {
                    window.location.reload(true);
                }
            },
        });
    });
});
