var visualEdit    = $('#visual-edit');

$(function(){
    function setCookie (name, value, path, term) {
        var exp = new Date(),
            terms = term || 30,
            paths = path || '/';
        exp.setTime(exp.getTime() + terms * 1 * 60 * 60 * 1000);
        document.cookie = name + "=" + value + ";path=" + paths + ";expires=" + exp.toGMTString();
    }

    var parameter = "visualEdit=true";

    //保存可视化页面编辑地址
    window.onbeforeunload = function(){
        var newurl = visualEdit.attr('data-newurl');

        if (typeof newurl != 'undefined' && newurl && newurl.indexOf(parameter) === -1) {
            if (newurl.indexOf("?") === -1) {
                // 如果 URL 不包含任何参数
                newurl = newurl + "?" + parameter;
            } else {
                // 如果 URL 已经包含参数
                newurl = newurl + "&" + parameter;
            }
        }

        if (typeof newurl !== 'undefined') {
            setCookie('visual_iframe_url', newurl)
        }
    }
    var iframeUlr = visualEdit.data('newurl');

    //加载可视化编辑页面
    visualEdit.attr('src', iframeUlr).on('load', function() {
        var visualContents  = $(this).contents(),
            visualWindow    = $(this).prop('contentWindow');

        var links = visualWindow.document.getElementsByTagName('a');
        var checkDomain = HOME_URL.replace(/^(http:\/\/|https:\/\/|\/\/)/, '').replace(/^www./, '').split('/')[0]
        for (var i = 0; i < links.length; i++) {
            var newAurl = links[i].href;
            if (newAurl && !newAurl.match(/^(tel:|mailto:|javascript:)/)) {
                if ((newAurl.indexOf(checkDomain) !== -1 || /^\//.test(newAurl.replace(/^(\/\/)/, ''))) && links[i].getAttribute('target') == '_blank') {
                    links[i].removeAttribute('target');
                }
            }

            if (newAurl &&newAurl.indexOf(parameter) === -1) {

                if (newAurl.indexOf("?") === -1) {
                    // 如果 URL 不包含任何参数
                    newAurl = newAurl + "?" + parameter;
                } else {
                    // 如果 URL 已经包含参数
                    newAurl = newAurl + "&" + parameter;
                }
                links[i].href = newAurl
            }
        }

        var visualDoms = visualWindow.document.querySelectorAll('[data-visual-url]');
        for (var j = 0; j < visualDoms.length; j++) {
            if (visualDoms[j].offsetWidth === 0) {
                visualDoms[j].style.minWidth = '10px'
            }
            if (visualDoms[j].offsetHeight === 0) {
                visualDoms[j].style.minHeight = '10px'
            }
        }

        //加载可视化编辑样式
        var style = visualWindow.document.createElement('style');
        style.id = 'visual-style';
        style.innerHTML = '[data-visual-url] {\n' +
            '    position: relative;\n' +
            '    z-index: 99999;\n' +
            '}\n' +
            '\n' +
            '[data-visual-url]:hover {\n' +
            'outline: 1px dashed #71d7f7;\n' +
            '}\n' +
            '\n' +
            '[data-visual-url] .visual-header {\n' +
            '    position: absolute;\n' +
            '    left: 0;\n' +
            '    top: 0;\n' +
            '    right: 0;\n' +
            '    height: 1px;\n' +
            '    text-align: center;\n' +
            '    z-index: 99999;\n' +
            '}\n' +
            '\n' +
            '[data-visual-url] .visual-header .visual-btn {\n' +
            '    background: #0d95e8;\n' +
            '    color: #fff;\n' +
            '    display: inline-block;\n' +
            '    white-space:nowrap;\n' +
            '    padding: 0 12px;\n' +
            '    font-size: 12px;\n' +
            '    line-height: 32px;\n' +
            '    height: 32px;\n' +
            '}';
        visualWindow.document.getElementsByTagName('head')[0].appendChild(style);

        //设置当前编辑页面路径
        visualEdit.attr('data-newurl', visualWindow.location.href);

        visualWindow.$('[data-visual-url]').hover(function () {
            var url = $(this).data('visual-url');
            var position = $(this).data('position-top') || 0;
            var appendDom = '<div class="visual-header" style="top: ' + position + ';">';
            appendDom += "<a class='visual-btn visual-m-btn' href='" + url + "'>编辑</a>";
            appendDom += '</div>';
            $(this).append(appendDom);
            visualContents.find('.visual-m-btn').fancybox({
                padding: 0,
                margin: 0,
                type: 'iframe',
                scrolling: 'auto',
                iframe: {
                    css: {width: '92%', height: '92%'}
                },
                afterShow: function (instance, current) {
                    // 获取当前 Fancybox 中的 iframe 元素
                    var iframe = current.$content.find('iframe');
                    // 监听 iframe 的地址变化
                    iframe.on('load', function () {
                        var currentUrl = iframe[0].contentWindow.location.href;
                        // 编辑完成后设置哪些管理需要关闭窗口
                        var editUrls = ['/admin/block', '/admin/ad'];
                        var isCloseFancybox = editUrls.some(function (string) {
                            return currentUrl.includes(string);
                        });
                        if (isCloseFancybox) {
                            instance.close()
                        }
                    })
                },
                afterClose: function () {
                    visualRefresh(); //窗口关闭执行操作
                }
            });
        }, function () {
            $(this).find('.visual-header').remove();
        });

    });
});

//刷新可视化界面
function visualRefresh() {
    document.getElementById('visual-edit').contentWindow.location.reload(true);
}