import reg from "./reg.js";
import htmlInsert, {domWalk} from "../plugin/htmlPlugin.js";
import {$el, $elByClass} from "../plugin/getElPlugin.js";
import _event from "../event/event.js";
import {oHeadEvent, oHomeEvent, oProEvent,oProInfoEvent} from "../event/bindEvent.js";
import template from "../template.js";

const event = _event.event,
    headEvent = _event.headEvent

/**
 * @param opt
 * @description 头部渲染模块
 */
export function headModule(opt) {

    htmlInsert({
        data: opt,
        el: '.headList',
        dom: template().headItemTpl,
        success:res=>{
            oHeadEvent.push({
                node: $el('#headItemTpl').children[res.idx],
                fnName: 'headerEvent',
                args: [res.rItem,res.idx],
                type:'click'
            })
        }
    })
}

/**
 *
 * @param src
 * @param type
 * @description 跳转功能
 */
export function hrefModule(src,type = 'local'){
    let _item = src,
        href = location.href.split('/'),
        _href = [],
        notNaNHref,
        rHref
    href.map((item,idx)=>{
        if(href[href.length - idx-1] && !isNaN(Number(href[href.length - idx-1])) || finStrOf(href[href.length - idx-1],'.html')){
            _href.push(href[href.length - idx - 1])
            _href.push('/')
            notNaNHref =  finStrOf(href[href.length - idx - 2],'public') || finStrOf(href[href.length - idx - 2],'com') === 1
                            ?   false
                            :   href[href.length - idx - 2]
        }
    })
    !notNaNHref && (_href[1] = '')
    console.log(_href);
    notNaNHref || (
        notNaNHref = isNaN(Number(href[href.length  - 1]))
        ?   ''
        :   href[href.length  - 1]
    )
    _href = _href.reverse().join().replaceAll(',','')
    if(notNaNHref+_href){
        rHref = location.href.replaceAll('/'+notNaNHref+_href,src)
    }else{
        rHref = location.href + src.replace('/','')
    }
    console.log(notNaNHref,_href,rHref,src);
    console.log('/' + notNaNHref + _href);
    type === 'local'
        ?   location.href = rHref
        :   window.open(rHref)
}

/**
 *
 * @param opt
 * @description tdk模块
 */
export function tdkModule(opt) {
    htmlInsert({
        data: opt,
        el: 'head',
        dom: $el('head').innerHTML,
        success: function (res) {
        }
    })
}

/**
 * @param str
 * @param tar
 * @returns {number}
 * @description 判断是否存在封装
 */
export function finStrOf(str, tar) {
    return str.toLowerCase().indexOf(tar.toLowerCase()) !== -1 ? 1 : 0
}

/**
 *
 * @param el
 * @param childrenEl
 * @param opt
 * @param cb
 * @param _opt
 * @description 菜单栏渲染模块
 */
export function menuProductModule(el, childrenEl, opt, cb,_opt) {
    // console.log(opt,_opt)
    // let html = '',
    //     _html = '',
    //     __html = '',
    //     oFMenuBoxTpl = $el('.fMenuBox').innerHTML,
    //     oSMenuTpl = $el('.sMenuTpl').innerHTML,
    //     oSMenuBoxTpl = $el('.sMenuBox').innerHTML,
    //     key = oFMenuBoxTpl.match(reg.regDom)?.[1].trim(),
    //     tarTpl = oFMenuBoxTpl.match(reg.regDom)?.[0],
    //     tpl = '',
    //     ___html = ''
    // opt.map((item, idx) => {
    //     tpl = oFMenuBoxTpl.replace(tarTpl, item?.[key])
    //     html += tpl
    //     _html = ''
    //     __html = ''
    //     item.children.map((item, _idx) => {
    //         item.index  = _idx + ( idx * (opt[idx-1]?.children?.length === undefined ? opt[0].children.length : opt[idx-1].children.length))
    //         // res.rItem.children[idx].index += res.idx*(opt[idx-1] === undefined ? opt[0].children.length : opt[idx-1].children.length)
    //         _html += domWalk(oSMenuBoxTpl,item)
    //     })
    //     __html = oSMenuTpl.replaceAll(oSMenuBoxTpl, _html)
    //     html += __html
    // })
    // $el('.fMenuBox').innerHTML = html
    // opt.map((item, idx) => {
    //     cb && cb({fMenuItem: item, index: idx,headerOption :_opt, node: $elByClass('fMenu')[idx]})
    // })
    oHeadEvent.push({
        node:'fMenu',
        fnName:'menuEvent',
        args :[],
        type: 'click'
    })
    oHeadEvent.push({
        node: 'MenuBigBox',
        fnName: 'MenuBigBoxEvent',
        args: [],
        type: 'click'
    })
}

/**
 *
 * @param _opt
 * @description 绑定事件封装
 */
export function bindEvent(_opt) {
    headEvent['init']()
    event!==undefined && event['init']()
    for (let __opt in _opt) {
        let opt = _opt[__opt]
        for (let item of opt) {
            if (typeof item.node === 'string' || item.node instanceof Array && event) {
                if(typeof item.node === 'string'){item.node = $elByClass(item.node)}
                item.node.map(node => {
                    if(event){
                        node.addEventListener(item.type, event[item.fnName]?.bind(node, ...item.args))
                        node.addEventListener(item.type, headEvent[item.fnName]?.bind(node, ...item.args))
                    }else{
                        node.addEventListener(item.type, headEvent[item.fnName]?.bind(node, ...item.args))
                    }
                })
            } else {
                if(event && item.node){
                    item.node.addEventListener(item.type, event[item.fnName]?.bind(item.node, ...item.args))
                    item.node.addEventListener(item.type, headEvent[item.fnName]?.bind(item.node, ...item.args))
                }else{
                    item.node && item.node.addEventListener(item.type, headEvent[item.fnName]?.bind(item.node, ...item.args))
                }
            }
        }
    }
}

/**
 * @param el
 * @param className
 * @param isOverFlow1
 * @param isOverFlow2
 * @description 样式名切换功能
 */
export function classSwitch(el, className, isOverFlow1 = true,isOverFlow2 = true) {
    let elClassName = className || el.className
    if (finStrOf(elClassName, 'dNone')) {
        isOverFlow1 && (document.body.style.overflowY = 'hidden')
        el.className = el.className.replaceAll('dNone', 'slide-in-bck-bottom')
        return true
    } else {
        isOverFlow2 && (document.body.style.overflowY = '')
        el.className = el.className.replaceAll('slide-in-bck-bottom', 'dNone')
        return true
    }
}

// /**
//  *
//  * @param opt
//  * @param cb
//  * @description 轮播图模块
//  *
//  */
// export function navModule(opt,cb) {
//     htmlInsert({
//         data: opt,
//         el: '.swiper-wrapper',
//         dom: template().NavItemTpl
//     }) && cb()
// }

/**
 * @author:hyw
 * @description:在html中创建rtx元素节点，然后将富文本放入到rtx里，可以继续优化
 */
export function rtxSwitch() {
    let oRtx = [...document.querySelector('body').getElementsByTagName('rtx')]
    oRtx.map(item => {
        let rtx = item.textContent
        rtx = rtx.replace(/&lt;/g, '<')
        rtx = rtx.replace(/&gt;/g, '>')
        rtx = rtx.replace(/&quot;/g, "'")
        rtx = rtx.replace(/&ldquo;/g, "")
        rtx = rtx.replace(/&amp;/g, "")
        rtx = rtx.replace(/&rdquo;/g, "")
        rtx = rtx.replace(/&nbsp;/g, "&nbsp;");
        (new Function('item,rtx', `item.innerHTML = rtx `))(item, rtx)
    })
}

/**
 * @param opt
 * @description 首页新闻模块
 */
export function indexNewModule(opt) {
    // $elByClass('newRightContentBox').map((item,idx)=>{
    //     oHomeEvent.push({
    //         node:[...$elByClass('newRightContentBox')[idx].children],
    //         args: [],
    //         type: 'click',
    //         fnName: 'newRightContentEvent'
    //     })
    // })
    // console.log(opt);
    // let tNewItem = $el('.newItemTpl'),
    //     tNewHead = `<div class="newButton "></div>`,
    //     tNewContent = tNewItem.getElementsByClassName('newRightContentBox'),
    //     tNewContentTpl = tNewContent[0].innerHTML
    // htmlInsert({
    //     data: opt,
    //     dom: tNewItem.innerHTML,
    //     el: '.newItemTpl',
    //     success: function (res) {
    //         let html = '',
    //             _html = ''
    //         res.rItem.news.map((item, idx) => {
    //             html += tNewContentTpl.replace(/{{(.+?)}}/g, function (str, b) {
    //                 let _str = str
    //                 _str = _str.replaceAll('{{', '')
    //                 _str = _str.replaceAll('}}', '')
    //                 return (new Function('item', `return ${_str}`))(this.item)
    //             }.bind({item, idx}));
    //             (idx % 2 === 0) && (_html += tNewHead)
    //         })
    //         res.idx === 0 && ($el('.new2ItemTpl').innerHTML = html)
    //         $elByClass('newRightItem')[res.idx].getElementsByClassName('newRightContentBox')[0].innerHTML = html
    //         $elByClass('newItemHeadTpl')[res.idx].innerHTML = _html
    //         $elByClass('new2ItemHeadTpl')[0].innerHTML = _html
    //         console.log($elByClass('newRightContentBox')[res.idx]);
    //         oHomeEvent.push({
    //             node:[...$elByClass('newRightContentBox')[res.idx].children],
    //             args: [opt[res.idx]],
    //             type: 'click',
    //             fnName: 'newRightContentEvent'
    //         })
    //     }
    // })
}

// /**
//  * @param opt
//  * @description 首页产品模块
//  */
// export function indexProductModule(opt) {
//     console.log(opt)
//     let showButtonBoxTpl = $el('.showButtonBoxTpl'),
//         showDetailTpl = $el('.showDetailTpl'),
//         _opt = opt[3],
//         oShowsTpl = $el('.showsTpl'),
//         _product = [...opt[0].product]
//     _product.length = 1
//     opt.length = 3
//     htmlInsert({
//         data: opt,
//         dom: showButtonBoxTpl.innerHTML,
//         el: '.showButtonBoxTpl',
//     })
//     let __opt = opt[0].product
//     __opt.length=4
//     oHomeEvent.push({
//         node: 'bindShowButtonEvent',
//         fnName: 'showButtonEvent',
//         args: [{opt, oShowDetail: showDetailTpl.innerHTML, oShowsTpl: oShowsTpl.innerHTML,}],
//         type: 'click'
//     })
//     oHomeEvent.push({
//         node: 'showLeftButton',
//         fnName: 'showLeftButtonEvent',
//         args: [{opt, oShowDetail: showDetailTpl.innerHTML, oShowsTpl: oShowsTpl.innerHTML,}],
//         type: 'click'
//     })
//     oHomeEvent.push({
//         node: 'showRightButton',
//         fnName: 'showRightButtonEvent',
//         args: [{opt, oShowDetail: showDetailTpl.innerHTML, oShowsTpl: oShowsTpl.innerHTML,}],
//         type: 'click'
//     })
//     showButtonBoxTpl.innerHTML += `
//         <a href="/product/105/0.html" class="showButton  col-lg-3 col-md-6 col-sm-6 showMoreButton">
//             <img src="${_opt['imgSrcPrefix']}/show4.png" alt="">
//             <div class="f1">更多</div>
//         </a>
//     `
//     htmlInsert({
//         data: __opt,
//         dom: showDetailTpl.innerHTML,
//         el: '.showDetailTpl'
//     })
//     htmlInsert({
//         data: _product,
//         dom: oShowsTpl.innerHTML,
//         el: '.showsTpl'
//     })
//     oHomeEvent.push({
//         node: 'showDetail',
//         fnName: 'showDetailEvent',
//         args: [opt],
//         type: 'click'
//     })
// }

/**
 *
 * @param opt
 * @description 产品模块
 */
export function productModule(opt) {
    // console.log(opt);
    // let oProductMenus = $el('.productMenusTpl'),
    //     html = '',
    //     _html = ''
    // htmlInsert({
    //     data: opt,
    //     dom: template().productFMenuTpl,
    //     success: function (res) {
    //         html+=res.tarHtml
    //         _html = ''
    //         res.rItem.children.map((item,idx)=>{
    //             res.rItem.children[idx].index += res.idx*(opt[idx-1] === undefined ? opt[0].children.length : opt[idx-1].children.length)
    //         })
    //         htmlInsert({
    //             data:res.rItem.children,
    //             dom: template().productSMenuTpl,
    //             success:res=>{
    //                 console.log(res);
    //                 _html+=res.tarHtml
    //             }
    //         })
    //         html+=_html
    //     }
    // })
    // oProductMenus.innerHTML = html
}

/**
 *
 * @param opt
 * @param limit
 * @description 产品分页模块
 */
export function productPageModule(opt,limit){
    // let pageNum = Math.ceil(opt.length / limit),
    //     arr = [],
    //     html ='',
    //     oProductPage = $el('.productPage')
    // for(let i = 0;i<pageNum;i++){
    //     html += domWalk('<div class="page">{{ page }}</div>\n',{page:i+1})
    // }
    // oProductPage.innerHTML = oProductPage.innerHTML.replace('<div class="page">{{ page }}</div>',html)
    oProEvent.push({
        node:'page',
        fnName:'productPageEvent',
        args:[],
        type:'click'
    })
}
/**
 * @param opt
 * @param limit
 * @param _idx
 * @description 产品渲染模块
 */
export function productRenderModule(opt,limit,_idx = 0) {
    // let idx = 0,
    //     GETArg,
    //     _opt = [...opt],
    //     tpl = template().productTpl
    // htmlInsert({
    //     data: _opt.splice(_idx*limit,limit),
    //     dom: tpl,
    //     el: '.productsBody',
    //     success:res=>{
    //         oProEvent.push({
    //             node:$elByClass('productButton')[res.idx],
    //             type:'click',
    //             fnName:'productButtonEvent',
    //             args:[res]
    //         })
    //     }
    // })
    // GETArg = location.href.split('/')
    // GETArg = GETArg[GETArg.length-1].replace('.html','')
    // idx = (new Function('idx', `return ${GETArg}`))()
    // $elByClass('productMenusItem')[idx]?.className!==undefined && ($elByClass('productMenusItem')[idx].className += ' productMenusItemActive')

}

/**
 *
 * @param opt
 * @param el
 * @param tar
 * @description 获取产品id功能
 */
export function getProductId(opt,el,tar){
    let idx = $elByClass(el).indexOf(tar),
        _idx = 0,
        __idx = 0
    _idx = idx>=opt[_idx].children.length ? _idx + 1 : _idx
    if(_idx ===0){
        __idx = idx - opt[_idx].children.length * _idx
    }else{
        __idx = idx - opt[_idx - 1].children.length * _idx
    }
    return [opt[_idx].children[__idx].dictionary_id,idx,_idx,__idx]
}

/**
 *
 * @param opt
 * 产品详情模块
 */
export function productInfoModule(opt){
    // htmlInsert({
    //     data:opt,
    //     dom:$el('.productInfosBox').innerHTML,
    //     el:'.productInfosBoxTpl'
    // })
}

/**
 *
 * @param opt
 * @description 首页资讯轮播模块
 */
export function indexHonourModule(opt){
    // htmlInsert({
    //     data:opt,
    //     dom:template().honourTpl,
    //     el:$elByClass('aboutCertificate')
    // })
    oHomeEvent.push({
        node: 'aboutCertificate',
        fnName: 'aboutCertificateEvent',
        type: 'mouseenter',
        args: []
    })
    oHomeEvent.push({
        node: 'aboutCertificate',
        fnName: '_aboutCertificateEvent',
        type: 'mouseleave',
        args: []
    })
}

/**
 *
 * @param opt
 * @description 海报模块，海报要自适应
 */
export function posterModule(opt){
    // // 适应？？
    // let el = $el('.poster')
    // el && (()=>{
    //     el.style.backgroundImage = `url(${opt[0].src})`
    // })()
}

export function c(name,aNode,tar){
    aNode.map(item=>{
        if(finStrOf(item.className,name)){
            item.className = item.className.replace(name,'')
        }
    })
    tar?.className && (tar.className+=' '+name)
}

/**
 *
 * @param fn
 * @param delay
 * @returns {(function(): void)|*}
 * @description 函数防抖
 */
export function debounce(fn,delay){
    let t = null;
    return function() {
        if (t !== null) {
            clearTimeout(t);
        }
        console.log("第一次先执行这里");
        t = setTimeout(fn, delay);
    }
}