"use strict";
/**
 * 拷贝事件
 */
define(function (require, exports, module) {

    function handle(event) {
        let utils = require("../../common/utils");
        let curS = utils.GetSelection();
        let curRange = curS.getRangeAt(0); //只考虑一个选区场景
        let curNode = utils.GetEventTarget(event);
        console.dir(curS)
        //只处理选择的是一个范围。
        // if (curS.type !== "Range") {
        //     return;
        // }
        //选区信息
        console.dir(curS)
        console.dir(curRange)

        //获取样式
        let styleK = curNode.getAttribute("data-k");
        let styleV = curNode.getAttribute("data-v");
        if (styleK === undefined || styleK === null) {
            styleK = curNode.closest("span").getAttribute("data-k");
            styleV = curNode.closest("span").getAttribute("data-v");
            // console.log("closest: ", curNode, curNode.closest("span"))
        }
        console.log("before styleK: ", styleK, " styleV: ", styleV);

        //获取开始结束的区域
        let curStartContainerEle = curRange.startContainer;
        let curEndContainerEle = curRange.endContainer;
        let taskMap = new Map;
        let start = curRange.startOffset;
        let end = curRange.endOffset;
        if (start > end) {
            let tmpS = start;
            start = end;
            end = tmpS;
        }

        //处理选区数量
        let pStart = getSpanContentOfP(curStartContainerEle);
        let pEnd = getSpanContentOfP(curEndContainerEle);
        console.dir(curStartContainerEle)
        console.dir(curEndContainerEle)
        console.dir(pStart)
        console.dir(pEnd)
        if (pStart.getAttribute("id") === pEnd.getAttribute("id")) {
            taskMap.set(pStart.getAttribute("id"), pStart)
        } else {
            //修正顺序
            let tmp = pStart;
            if (parseInt(pStart.getAttribute("data-order")) > parseInt(pEnd.getAttribute("data-order"))) {
                pStart = pEnd;
                pEnd = tmp;
            }
            //fill p
            let nextTask = pStart;
            taskMap.set(nextTask.getAttribute("id"), nextTask)
            while (true) {
                nextTask = nextTask.nextSibling;
                taskMap.set(nextTask.getAttribute("id"), nextTask)
                if (nextTask.getAttribute("id") === pEnd.getAttribute("id")) {
                    break
                }
                console.dir(nextTask)
            }
        }
        //选择单行还是多行
        let total = taskMap.size;
        let hadNum = 0;
        console.dir(taskMap)
        let doneNum = 0;

        let curTxtIndent = CalCurTextIndent(pStart);
        for (let [key, curP] of taskMap) {
            let curSpanContent = curP.querySelector("span[data-flag='span_content']");
            console.log("curP : ", curP, "\n", "\nkey:", key, "\ncurSpanContent: ", curSpanContent,
                "\npreEle: ", curP.previousElementSibling);

            //设置属性 展示 ::before
            curSpanContent.setAttribute("data-before-style", styleK);
            //无序
            if (styleV === "ol") {
                let tmpV = curSpanContent.getAttribute(styleK);
                if (tmpV !== undefined && tmpV !== null) {
                    hadNum++;
                } else {
                    curSpanContent.style.setProperty("text-indent", curTxtIndent + "em");
                    curSpanContent.setAttribute(styleK, "• ");
                }

                continue;
            }

            //有序
            if (styleV === "ul") {
                let tmpV = curSpanContent.getAttribute(styleK);
                if (tmpV !== undefined && tmpV !== null) {
                    hadNum++;
                } else {
                    curSpanContent.style.setProperty("text-indent", curTxtIndent + "em");
                    //::before
                    doneNum++;
                    curSpanContent.setAttribute(styleK, doneNum + "• ");
                }
                continue;
            }
        }

        // 如果全部已经设置好了 则取消
        if (total === hadNum) {
            for (let [key, curP] of taskMap) {
                let curSpanContent = curP.querySelector("span[data-flag='span_content']");
                curSpanContent.removeAttribute(styleK);
                curSpanContent.removeAttribute("data-before-style");
                curSpanContent.style.setProperty("text-indent", "2em");
            }
        }

    }

    function CalCurTextIndent(curP) {
        let preP = curP.previousElementSibling;
        let curTxtIndent = 4;
        if (preP !== null) {
            let preSpanContent = preP.querySelector("span[data-flag='span_content']");
            if (preSpanContent !== null) {
                let txtIndent = preSpanContent.style.getPropertyValue("text-indent");
                console.log("txtIndent : ", txtIndent, preSpanContent)
                if (txtIndent !== null && txtIndent !== "") {
                    curTxtIndent = parseInt(txtIndent.replace("em", "")) + 2;
                }
            }
        }
        return curTxtIndent;
    }

    function getSpanContentOfP(item) {
        let tmp = item;
        if (item.nodeName !== "SPAN" || item.getAttribute("data-flag") !== "span_content") {
            tmp = item.parentElement.closest("span[data-flag='span_content']");
        }
        return tmp.parentNode;
    }


    //导出
    exports.handle = handle;
});