let tableIns;
let tableCNT;
let tableSNB;
let tablePlayerLog;
let tree;
layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], function () {
    let table = layui.table;
    let form = layui.form;//select、单选、复选等依赖form
    form.verify({
        positiveNumberRequiredTrue: [/^(([0-9]+[\.]?[0-9]+)|[1-9])$/, '只能填写正数'],//必填，且只能输入正数
        positiveWholeNumberRequiredTrue: [/^[+]{0,1}(\d+)$/, '只能填写正整数'],//必填，且只能输入正整数
    });

    let element = layui.element; //导航的hover效果、二级菜单等功能，需要依赖element模块
    let laydate = layui.laydate;
    tree = layui.tree;
    let height = document.documentElement.clientHeight * 0.5; //随便设置下，和操作表单大概一样
    //用户列表
    tableIns = table.render({
        elem: '#userTable'
        , url: ctx + "/sys/sysComUsers/findGameUserByAddress"
        , method: 'POST'
        //请求前参数处理
        // , request: {
        //     pageName: 'page' //页码的参数名称，默认：page
        //     , limitName: 'rows' //每页数据量的参数名，默认：limit
        // }
        , response: {
            statusName: 'flag' //规定数据状态的字段名称，默认：code
            , statusCode: true //规定成功的状态码，默认：0
            , msgName: 'msg' //规定状态信息的字段名称，默认：msg
            , countName: 'records' //规定数据总数的字段名称，默认：count
            , dataName: 'rows' //规定数据列表的字段名称，默认：data
        }
        //响应后数据处理
        , parseData: function (res) { //res 即为原始返回的数据
            var data = res.data;
            // console.log("返回的地址数据：", data);
            //这里应该是反回一个用户，后台做成了页面数据。但是只带一条数据
            if (data.rows.length > 0) {
                if (!data.rows[0]) {
                    layer.msg("没有查询到用户数据", {icon: 2, time: 2000}, function () {
                    });
                    return;
                }
                // 加上时间排序
                let _findData = {userId: data.rows[0].userId, sidx: "desc", sord: "createTime"};
                if (!tableSNB) {
                    initSNBTable(table, _findData);
                } else {
                    //如果已经初始化，刷新当前用户信息
                    snbReload(_findData);
                }
                if (!tableCNT) {
                    initCNTTable(table, _findData);
                } else {
                    //如果已经初始化，刷新当前用户信息
                    cntReload(_findData);
                }

                if (!tablePlayerLog) {
                    initPlayerLog(table, _findData);
                } else {
                    playerLogReload(_findData);
                }
            }

            return {
                "flag": res.flag, //解析接口状态
                "msg": res.msg, //解析提示文本
                "records": data.records, //解析数据长度
                "rows": data.rows //解析数据列表
            };
        }
        , toolbar: '#userTableToolbarDemo'
        , title: '用户列表'
        , cols: [[
            {field: 'userId', title: '用户id'}
            , {field: 'gold', title: '金币', hide: true}
            , {field: 'diamond', title: '钻石', hide: true}
            , {field: 'cnt', title: 'CNT', hide: true}
            , {field: 'snb', title: 'SNB'}
            , {field: 'address', title: '钱包地址', hide: true}
            , {
                field: 'limitLogin', title: '限制登录', templet: function (d) {
                    if (d.limitLogin == 1) {  // 自定义内容
                        return '<span style="color: red">限制</span>';
                    } else {
                        return "未限制";
                    }
                }
            }
            , {
                field: 'limitTran', title: '限制交易', templet: function (d) {
                    if (d.limitTran == 1) {  // 自定义内容
                        return '<span style="color: red">限制</span>';
                    } else {
                        return "未限制";
                    }
                }
            }
            , {field: 'lastLogin', title: '最近登录时间', hide: true}
            , {fixed: 'right', title: '操作', toolbar: '#userTableBarDemo'}
        ]]
        , defaultToolbar: ['', 'exports', 'print']
        , page: false
        , height: height
        , cellMinWidth: 80
    });

    //头工具栏事件
    table.on('toolbar(test)', function (obj) {
        switch (obj.event) {
            case 'addData':
                layer.msg("点击增加按钮！");
                break;
            case 'query':
                //根据用户地址查询
                findByUserAddress(form);
                break;
            case 'snbReload':
                snbReload();
                break;
            case 'cntReload':
                cntReload();
                break;
            case 'playerLogReload':
                playerLogReload();
                break;
        }
    });

    //监听行工具事件
    table.on('tool(test)', function (obj) {
        let data = obj.data;
        //编辑
        if (obj.event === 'edit') {
            // console.log("edit");
            //回显操作表单
            $("#comUserForm").form(data);
            form.render();
        }
    });


    //日期选择器
    laydate.render({
        elem: '#expiredTimeDate',
        format: "yyyy-MM-dd HH:mm:ss"
    });

    //监听提交
    form.on('submit(comUserFilter)', function (data) {
        // layer.alert(JSON.stringify(data.field), {
        //     title: '最终的提交信息'
        // })
        comUserFormSave();
    });
});


function findByUserAddress(form) {
    //重置数据
    $("#comUserForm")[0].reset();
    form.render();
    // "TUNkoeP5LxSKh45rwspcWu3DaKRVERfEiu" 测试
    let queryByAddress = $("#queryByAddress").val();
    //获取菜单数据
    // $.post(ctx + "/sys/sysComUsers/findGameUserByAddress", {address: queryByAddress}, function (res) {
    //     console.log("comUsersVo:", res.data)
    // });
    if (queryByAddress.length <= 0) {
        layer.msg("输入用户钱包地址查询", {icon: 2, time: 1000}, function () {
        });
        return;
    }
    tableIns.reload({
        // page: {
        //     curr: 1 //重新从第 1 页开始
        //     , limit: 10
        // },
        method: 'POST'
        , url: ctx + "/sys/sysComUsers/findGameUserByAddress"
        , where: {address: queryByAddress}
        , done: function (res, curr, count) {
            // console.log(res, curr, count);
            $("input[name='queryByAddress']").val(queryByAddress);
            //this.where={};
            //不清空，有问题：搜索条件会保留
            //清空，  有问题：分页的时候没有搜索条件了,分页会受到影响
        }
    });
}

/**
 * 提交保存
 */
function comUserFormSave() {
    let comUserForm = $("#comUserForm").serializeObject();
    // console.log(comUserForm);
    if (!comUserForm.userId) {
        layer.msg("选择编辑的用户", {icon: 2, time: 1000}, function () {
        });
        return;
    }
    $.post(ctx + "/sys/sysComUsers/save", comUserForm, function (data) {
        if (!data.flag) {
            layer.msg(data.msg, {icon: 2, time: 2000}, function () {
            });
            return;
        }
        tableIns.reload();
    });
}

function initSNBTable(table, data) {
    // console.log("initSNBTable");
    //用户SNB明细，这里直接处理了
    tableSNB = table.render({
        elem: '#comSnbTranTable'
        , url: ctx + "/sys/sysComUsers/findSNBTranByUserId"
        , method: 'POST'
        //请求前参数处理
        , request: {
            pageName: 'page' //页码的参数名称，默认：page
            , limitName: 'rows' //每页数据量的参数名，默认：limit
        }
        , where: data
        , response: {
            statusName: 'flag' //规定数据状态的字段名称，默认：code
            , statusCode: true //规定成功的状态码，默认：0
            , msgName: 'msg' //规定状态信息的字段名称，默认：msg
            , countName: 'records' //规定数据总数的字段名称，默认：count
            , dataName: 'rows' //规定数据列表的字段名称，默认：data
        }
        //响应后数据处理
        , parseData: function (res) { //res 即为原始返回的数据
            var data = res.data;
            return {
                "flag": res.flag, //解析接口状态
                "msg": res.msg, //解析提示文本
                "records": data.records, //解析数据长度
                "rows": data.rows //解析数据列表
            };
        }
        , toolbar: '#comSnbTranTableToolbarDemo'
        , title: 'SNB列表'
        , cols: [[
            {field: 'id', title: 'ID', hide: true}
            , {field: 'userId', title: 'userId'}
            , {field: 'tranId', title: '操作对象的id'}
            , {field: 'tranName', title: '交易操作', width: 100}
            , {
                field: 'tranType', title: '交易类型', width: 120, templet: function (d) {
                    if (d.tranType == 0) {  // 自定义内容
                        return '<span style="color: green">出售果实</span>';
                    } else if (d.tranType == 1) {
                        return '<span style="color: red">转CNT冻结</span>';
                    } else if (d.tranType == 2) {
                        return '<span style="color: green">转CNT解冻</span>';
                    } else if (d.tranType == 3) {
                        return '<span style="color: red">购买种子</span>';
                    } else if (d.tranType == 4) {
                        return '<span style="color: red">偷取果实</span>';
                    } else if (d.tranType == 5) {
                        return '<span style="color: red">购买装备</span>';
                    } else if (d.tranType == 6) {
                        return '<span style="color: red">购买装备</span>';
                    } else if (d.tranType == 7) {
                        return '<span style="color: red">购买狗粮</span>';
                    } else if (d.tranType == 8) {
                        return '<span style="color: red">释放SNB</span>';
                    } else if (d.tranType == 9) {
                        return '<span style="color: red">幸运值</span>';
                    } else {
                        return '<span style="color: red">待添加：</span>' + d.tranType;
                    }
                }
            }
            , {field: 'tranAmount', title: '交易数量',templet: function (d) {
                    return (d.tranAmount + d.tranAmountPart).toFixed(5);
                }}
            , {field: 'tranPrice', title: '交易价格'}
            , {field: 'tranDescribe', title: '交易描述'}
            , {
                field: 'isAdd', title: '状态', width: 80, templet: function (d) {
                    if (d.isAdd == 0) {  // 自定义内容
                        return '<span style="color: red">减少</span>';
                    } else {
                        return '<span style="color: green">增加</span>';
                    }
                }
            }
            , {field: 'beforeSnb', title: '交易之前的snb',templet: function (d) {
                    return (d.beforeSnb + d.beforeSnbPart).toFixed(5);
                }}
            , {field: 'tranSnb', title: '交易的snb', templet: function (d) {
                    return (d.tranSnb + d.tranSnbPart).toFixed(5);
                }}
            , {field: 'afterSnb', title: '交易完成后的snb',templet: function (d) {
                    return (d.afterSnb + d.afterSnbPart).toFixed(5);
                }}
            , {field: 'createTime', title: '创建时间'}
            , {field: 'updateTime', title: '更新时间', hide: true}
        ]]
        , defaultToolbar: ['', 'exports', 'print']
        , page: true
        , height: 500
        , cellMinWidth: 80
    });
}


function snbReload(data) {
    // console.log("snbReload where:", this.where, data);
    tableSNB.reload({
        page: {
            curr: 1 //重新从第 1 页开始
            , limit: 10
        }
        , method: 'POST'
        , url: ctx + "/sys/sysComUsers/findSNBTranByUserId"
        , where: data
        , done: function (res, curr, count) {
            // console.log(res, curr, count);
            //this.where={};
            //不清空，有问题：搜索条件会保留
            //清空，  有问题：分页的时候没有搜索条件了,分页会受到影响
        }
    });
}


function initCNTTable(table, data) {
    //用户CNT明细，这里直接处理了
    // console.log("initCNTTable");
    tableCNT = table.render({
        elem: '#comCntOrderTable'
        , url: ctx + "/sys/sysComUsers/findCNTTranByUserId"
        , method: 'POST'
        //请求前参数处理
        , request: {
            pageName: 'page' //页码的参数名称，默认：page
            , limitName: 'rows' //每页数据量的参数名，默认：limit
        }
        , where: data
        , response: {
            statusName: 'flag' //规定数据状态的字段名称，默认：code
            , statusCode: true //规定成功的状态码，默认：0
            , msgName: 'msg' //规定状态信息的字段名称，默认：msg
            , countName: 'records' //规定数据总数的字段名称，默认：count
            , dataName: 'rows' //规定数据列表的字段名称，默认：data
        }
        //响应后数据处理
        , parseData: function (res) { //res 即为原始返回的数据
            var data = res.data;
            return {
                "flag": res.flag, //解析接口状态
                "msg": res.msg, //解析提示文本
                "records": data.records, //解析数据长度
                "rows": data.rows //解析数据列表
            };
        }
        , toolbar: '#comCntOrderTableToolbarDemo'
        , title: 'CNT列表'
        , cols: [[
            {field: 'id', title: 'ID', hide: true}
            , {field: 'userId', title: 'userId', width: 260}
            , {field: 'address', title: '钱包地址', hide: true}
            , {
                field: 'payType', title: '交易的类型', width: 100, templet: function (d) {
                    if (d.payType == 1) {  // 自定义内容
                        return '<span style="color: green">土地租赁</span>';
                    } else if (d.payType == 4) {
                        return '<span style="color: green">购买种子</span>';
                    } else {
                        return '<span style="color: green">待添加：</span>' + d.payType;
                    }
                }
            }
            , {field: 'payAmount', title: '交易数量(CNT)', width: 150}
            , {
                field: 'itemType', title: '项目类型', width: 500, templet: function (d) {
                    //todo 土地操作修改 比如倍数+id = 1or12 2or12 3or12
                    // String[] itemArray = item_type.split("or");
                    // Integer playCycle = Integer.parseInt(itemArray[0]); //土地周期，比如3个月，1年,5年等
                    // Integer configLandId = Integer.parseInt(itemArray[1]); //itemType
                    let _itemType = d.itemType;
                    if (_itemType.indexOf('or') === -1) {
                        return '购买种子:id=' + '<span style="color: red">' + _itemType + '</span>';
                    } else {
                        let _itemArray = _itemType.split("or")
                        let _configLandId = parseInt(_itemArray[1]); //itemType
                        let _landCycle = "3个月";
                        let _playCycle = parseInt(_itemArray[0]); //土地周期，比如3个月，1年,5年等
                        if (_playCycle == 2) {
                            _landCycle = "1年";
                        } else if (_playCycle == 3) {
                            _landCycle = "5年";
                        }
                        return '租赁土地' + '<span style="color: red">' + _configLandId + '</span>' + '号,周期:'
                            + '<span style="color: red">' + _landCycle + '</span>';
                    }
                }
            }
            , {field: 'txHash', title: 'txHash'}
            , {field: 'cntDescribe', title: '交易描述', hide: true}
            , {field: 'createTime', title: '创建时间'}
            , {field: 'updateTime', title: '更新时间', hide: true}
        ]]
        , defaultToolbar: ['', 'exports', 'print']
        , page: true
        , height: 500
        , cellMinWidth: 80
    });
}

function cntReload(data) {
    // console.log("cntReload where:", this.where, data);
    tableCNT.reload({
        page: {
            curr: 1 //重新从第 1 页开始
            , limit: 10
        }
        , method: 'POST'
        , url: ctx + "/sys/sysComUsers/findCNTTranByUserId"
        , where: data
        , done: function (res, curr, count) {
            // console.log(res, curr, count);
            // this.where={};
            //不清空，有问题：搜索条件会保留
            //清空，  有问题：分页的时候没有搜索条件了,分页会受到影响
        }
    });
}


/**
 * 用户操作日志
 * @param table
 * @param data
 */
function initPlayerLog(table, data) {
    //用户操作playerLog
    // console.log("playerLog");
    tablePlayerLog = table.render({
        elem: '#comPlayerLogTable'
        , url: ctx + "/sys/sysComUsers/findPlayerLogPage"
        , method: 'POST'
        //请求前参数处理
        , request: {
            pageName: 'page' //页码的参数名称，默认：page
            , limitName: 'rows' //每页数据量的参数名，默认：limit
        }
        , where: data
        , response: {
            statusName: 'flag' //规定数据状态的字段名称，默认：code
            , statusCode: true //规定成功的状态码，默认：0
            , msgName: 'msg' //规定状态信息的字段名称，默认：msg
            , countName: 'records' //规定数据总数的字段名称，默认：count
            , dataName: 'rows' //规定数据列表的字段名称，默认：data
        }
        //响应后数据处理
        , parseData: function (res) { //res 即为原始返回的数据
            let data = res.data;
            // console.log("playerLog",res);
            return {
                "flag": res.flag, //解析接口状态
                "msg": res.msg, //解析提示文本
                "records": data.records, //解析数据长度
                "rows": data.rows //解析数据列表
            };
        }
        , toolbar: '#comPlayerLogTableToolbarDemo'
        , title: '用户仓库操作列表'
        , cols: [[
            {field: 'id', title: 'ID', hide: true}
            , {field: 'userId', title: 'userId', width: 260}
            , {field: 'tId', title: '目标id', width: 100}
            , {
                field: 'tType', title: '交易的类型', width: 100, templet: function (d) {
                    if (d.tType == 0) {  // 自定义内容
                        return '<span style="color: green">收获果实</span>';
                    } else if (d.tType == 1) {
                        return '<span style="color: red">种植种子</span>';
                    } else if (d.tType == 2) {
                        return '<span style="color: red">赠送</span>';
                    } else if (d.tType == 3) {
                        return '<span style="color: green">被赠送</span>';
                    } else if (d.tType == 4) {
                        return '<span style="color: green">钻石兑换种子</span>';
                    } else if (d.tType == 5) {
                        return '<span style="color: red">出售果实</span>';
                    } else if (d.tType == 6) {
                        return '<span style="color: green">偷取果实</span>';
                    }
                    else {
                        return '<span style="color: green">待添加：</span>' + d.tType;
                    }
                }
            }
            , {field: 'tName', title: '物品名字', width: 120}
            , {
                field: 'tAmount', title: '交易数量', width: 150, templet: function (d) {
                  return (d.tAmount + d.tPart).toFixed(5);
                }
            }
            , {field: 'beforeAmount', title: '交易前数量', templet: function (d) {
                    return (d.beforeAmount + d.beforePart).toFixed(5);
                }}
            , {field: 'afterAmount', title: '交易后数量', templet: function (d) {
                    return (d.afterAmount + d.afterPart).toFixed(5);
                }}
            , {field: 'tLoss', title: '系统扣除部分'}
            , {field: 'lMultiple', title: 'land倍数', width: 80}
            , {field: 'createTime', title: '创建时间'}
            , {field: 'updateTime', title: '更新时间', hide: true}
        ]]
        , defaultToolbar: ['', 'exports', 'print']
        , page: true
        , height: 500
        , cellMinWidth: 80
    });
}


function playerLogReload(data) {
    tablePlayerLog.reload({
        page: {
            curr: 1 //重新从第 1 页开始
            , limit: 10
        }
        , method: 'POST'
        , url: ctx + "/sys/sysComUsers/findPlayerLogPage"
        , where: data
        , done: function (res, curr, count) {
        }
    });
}