
var common = {};
common.index = 0;
common.random = function (min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

common.resetConsole = function (x, y, w, h) {
    console.show(true);
    x = x || 0;
    y = y || 0;
    w = w || device.width * 0.7;
    h = h || device.height * 0.2;
    sleep(1000);
    console.setPosition(x, y);
    sleep(1000);
    ui.run(() => {
        console.setSize(w, h);
        console.setCanInput(false);
        console.setTitle("", "#ff11ee00", 30);
        console.setLogSize(8);
    })
}
common.setConsoleTitle = function (title, color, size) {
    console.setTitle(title, color, size);
}
common.getRadioIndex = function (radios) {
    for (let index = 0; index < radios.length; index++) {
        const element = radios[index];
        if (element == true) {
            return index;
        }
    }
    return 0;
}
common.waitTime = function (seconds, txt) {
    var i = seconds;
    var msg = txt || "倒计时";
    if (1 > seconds && seconds > 0) {
        common.index++;
        log(msg);
        sleep(seconds * 1000)
        return;
    }
    var show = true;
    while (i >= 0) {
        show = true;
        if (i > 100 && i % 5 != 0) {
            show = false;
        }
        if (show) {
            log(msg + "-->" + i);
        }
        if (i % 5 == 0) {
            common.index++;
        }
        if (i != 0) {
            sleep(1000)
        }
        i--;
    }
}
common.openApp = function (name) {
    launchApp(name);
}
common.backHomeReloadApp = function (name) {
    common.closeApp(name)
    sleep(1000);
    common.openApp(name);
}
common.swipeToRight = function () {
    // eslint-disable-next-line no-undef
    swipe(device.width * 0.8 + random(-20, 10), device.height * 0.5 + random(-20, 10),
        device.width * 0.2 + random(-20, 10), device.height * 0.5 + random(-20, 10), 1);
}
common.swipeToLeft = function () {
    // eslint-disable-next-line no-undef
    swipe(device.width * 0.2 + random(-20, 10), device.height * 0.5 + random(-20, 10),
        device.width * 0.8 + random(-20, 10), device.height * 0.5 + random(-20, 10), 1);
}
common.closeApp = function (name) {
  //  launchApp(name);
    var i = 0;
    while (i < 5) {
        back();
        sleep(1000);
        i++;
    }
    back();
    sleep(1000);
    back();
}

//短距离测试
//sml_move(400, 1000, 800, 600, 1000);
//此代码由飞云脚本圈整理提供（www.feiyunjs.com）
function bezier_curves(cp, t) {
    var cx = 3.0 * (cp[1].x - cp[0].x);
    var bx = 3.0 * (cp[2].x - cp[1].x) - cx;
    var ax = cp[3].x - cp[0].x - cx - bx;
    var cy = 3.0 * (cp[1].y - cp[0].y);
    var by = 3.0 * (cp[2].y - cp[1].y) - cy;
    var ay = cp[3].y - cp[0].y - cy - by;

    var tSquared = t * t;
    var tCubed = tSquared * t;
    var result = {
        "x": 0,
        "y": 0
    };
    result.x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0].x;
    result.y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0].y;
    return result;
}
//仿真随机带曲线滑动  
//qx, qy, zx, zy, time 代表起点x,起点y,终点x,终点y,过程耗时单位毫秒
common.swipeRandom = function (qx, qy, zx, zy, time) {
    var xxy = [time];
    var point = [];
    var dx0 = {
        "x": qx,
        "y": qy
    };
    var dx1 = {
        "x": random(qx - 100, qx + 100),
        "y": random(qy, qy + 50)
    };
    var dx2 = {
        "x": random(zx - 100, zx + 100),
        "y": random(zy, zy + 50),
    };
    var dx3 = {
        "x": zx,
        "y": zy
    };
    point.push(dx0);
    point.push(dx1);
    point.push(dx2);
    point.push(dx3);
    // log(point[3].x)
    for (let i = 0; i < 1.2; i += 0.08) {
        var xxyy = [parseInt(bezier_curves(point, i).x), parseInt(bezier_curves(point, i).y)]
        xxy.push(xxyy);
    }
    //  log(xxy);
    gesture.apply(null, xxy);
};

common.readlines = function (dir) {
    files.ensureDir(dir);
    if (!files.exists(dir)) {
        files.create(dir);
    }
    var m = files.open(dir, "r").readlines();
    return m;
}
common.deviceHeight = function () {
    return device.height - device.getVirtualBarHeigh();
}
common.clickDesc = function (desc) {
    // eslint-disable-next-line no-constant-condition
    while (true) {
        desc("desc").findOnce();
        break;
    }
}
common.getRandomMsg = function (msgs) {
    var index = random(0, msgs.length - 1);
    return msgs[index];
}
common.timeToSec = function (time) {
    var min = time.split(':')[0]
    var sec = time.split(':')[1]
    var s = Number(min * 60) + Number(sec)
    return s
}
common.timestampToHMS = function (timestamp) {
    var date = new Date(Number(timestamp));//时间戳为10位需*1000，时间戳为13位的话不需乘1000
    var h = (date.getHours() < 10 ? '0' + date.getHours() : "" + date.getHours()) + ':';
    var m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : "" + date.getMinutes()) + ':';
    var s = (date.getSeconds() < 10 ? '0' + date.getSeconds() : "" + date.getSeconds());
    return h + m + s;

}
common.textToList = function (str) {
    var snsArr = str.split('\n');
   snsArr =  snsArr.filter(function (s) {
      return s && s.trim();
   });
    return snsArr;
}
var storageKey = "cslcommon";
common.saveObj = function (key, obj) {
    var storage = storages.create(storageKey);
    storage.put(key, obj);
}
common.getObj = function (key) {
    var storage = storages.create(storageKey);
    return storage.get(key);
}
common.contains = function (key) {
    var storage = storages.create(storageKey);
    return storage.contains(key);
}
common.remove = function (key) {
    var storage = storages.create(storageKey);
    storage.remove(key)
}
common.clear = function () {
    var storage = storages.create(storageKey);
    storage.clear();
}
common.httptext = function (id) {
    try {
        var r = http.get(common.origin + "/material/getText?id=" + id);
        return r.body.json();
    } catch (error) {
        console.log(error)
    }
    return {};
}
common.dateFormat = function (fmt, date) {
    var o = {
        "M+": date.getMonth() + 1,                 //月份 
        "d+": date.getDate(),                    //日 
        "h+": date.getHours(),                   //小时 
        "m+": date.getMinutes(),                 //分 
        "s+": date.getSeconds(),                 //秒 
        "q+": Math.floor((date.getMonth() + 3) / 3), //季度 
        "S": date.getMilliseconds()             //毫秒 
    };
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    for (var k in o) {
        if (new RegExp("(" + k + ")").test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        }
    }
    return fmt;
}
common.init = function (options) {
    common.userCode = options.userCode || 2;
    common.origin = options.origin || 'http://112.74.161.35:9317';
    common.deviceCode = this.getDeviceCode();
}
common.strToNumber = function (str) {
    var dw = 1;
    if (str.indexOf("w") != -1) {
        dw = 10000;
    }
    return parseInt(str.replace('w', "")) * parseInt(dw);
}
common.getDeviceCode = function () {
    if (!common.deviceCode) {
        common.deviceCode = device.getIMEI() || device.getAndroidId();
    }
    return common.deviceCode;
}
common.stringIsBlank = function (string) {
    if (string == null || string == undefined || string == "" || string == 'undefined') {
        return true;
    }
    return false;
}
/**
 * 
 * @param {*} status  1在线(空闲)，0离线,3停用,-1删除,4未激活,2任务中
 */
common.updateDeviceStatus = function (status = status || 1) {
    var qurl = common.origin + "/device/updateStatusByImei?imei" + this.getDeviceCode() + "&status=" + status;
    var r = http.get(qurl);
    var msg = r.body.json();
    console.log(msg);
}
common.forceStopApp = function (e) {
    try {
        shell("am force-stop " + e, true)
    } catch (e) {
        console.log(e)
    }
}

common.noResponse = function () {
    var e;
    if (text("等待").findOnce() && (e = text("关闭应用").findOnce())) {
        e.click();
        sleep(1e3);
        return true
    }
    return false
}
common.topClickedView = function (e) {
    while (e && !e.clickable()) {
        e = e.parent()
    }
    return e
}
common.xs_控件坐标点击 = function (UiObject, M) {
    if (UiObject) {
        if (M) {
            var rect = UiObject.bounds();
            return click(rect.centerX(), rect.centerY());
        } else {
            if (UiObject.clickable()) {
                return UiObject.click();
            } else {
                return arguments.callee(UiObject.parent());
            };
        };
    };
};
common.xs_控件点击 = function (nr1, nr2) {
    if (nr1 == "text") {
        text(nr2).findOne(1000).click();
    }
    if (nr1 == "name") {
        className(nr2).findOne(1000).click();
    }
    if (nr1 == "desc") {
        desc(nr2).findOne(1000).click();
    }
    if (nr1 == "id") {
        id(nr2).findOne(1000).click();
    }
};
common.xs_控件匹配点击 = function (nr1) {
    if (nr1) {
        var rect = textContains(nr1).findOne(1000)
        if (rect != null) {
            rect = rect.text();
            return click(rect);
        } else {
            return false
        }
    }
};
common.xs_删除写入文本 = function (nr1, nr2) {
    file = open(nr1, "w");
    file.write(nr2);
    file.close(); //关闭文件
};
common.xs_叠加写入文本 = function (nr1, nr2) {
    file = open(nr1, "a");
    file.writeline(nr2);
    file.close(); //关闭文件
};
common.xs_读取txt第一行 = function (nr1, nr2) {  //nr1是路径,,nr2是编码 常用编码(utf-8)(gb2312) 
    var text = open(nr1, "r", nr2);
    var t = text.readlines();
    text.close();
    for (a in t) {
        if (a == 0) {
            //  log("txt第一行:" + t[i])
            return t[a]
        }
    }
};
common.xs_读取txt全部内容 = function (nr1, nr2) {  //nr1是路径,,nr2是编码 常用编码(utf-8)(gb2312) 
    var text = open(nr1, "r", nr2);
    var t = text.read();
    text.close();
    return t
};
common.xs_读取txt数组内容 = function (nr1, nr2) {  //nr1是路径,,nr2是编码 常用编码(utf-8)(gb2312) 
    var text = open(nr1, "r", nr2);
    var t = text.readlines();
    text.close();
    return t
};
common.xs_删除txt第一行 = function (nr1) {
    var text = open(nr1, "r", "utf-8")
    var t = text.readlines();
    text.close();
    files.remove(nr1)
    files.createWithDirs(nr1)
    var Text = open(nr1, "w", "utf-8");
    for (a in t) {
        if (a != 0) {
            Text.write(t[a] + "\r\n")
        }
    }
    Text.close()
    return t[1]
};

common.xs_控件是否存在 = function (nr1, nr2) {
    if (nr1 == "text") {
        if (text(nr2).exists()) {
            return true
        } else {
            return false
        }
    }
    if (nr1 == "name") {
        if (className(nr2).exists()) {
            return true
        } else {
            return false
        }
    }
    if (nr1 == "desc") {
        if (desc(nr2).exists()) {
            return true
        } else {
            return false
        }
    }
    if (nr1 == "id") {
        if (id(nr2).exists()) {
            return true
        } else {
            return false
        }
    }
};
common.xs_控件匹配是否存在 = function (nr1, nr2) {
    if (nr1 == "text") {
        if (textContains(nr2).exists()) {
            return true;
        } else {
            return false;
        }
    }
    if (nr1 == "desc") {
        if (descContains(nr2).exists()) {
            return true;
        } else {
            return false;
        }
    }
};
common.xs_全屏正则匹配是否存在 = function (reg) {
        if (descMatches(reg).boundsInside(0,0,device.width,device.height).exists()) {
             console.log("文本-->",reg, descMatches(reg).findOne().desc());
            return true;
        }
        if (textMatches(reg).boundsInside(0,0,device.width,device.height).exists()) {
            console.log("文本-->",reg, textMatches(reg).findOne().text());
            return true;
        }
    return false;
};

common.findNode = function (selecter, isclick) {  //text("在线")    textContains("在线")    desc("在线")    descContains("在线")
    let g_ret = null;
    try {
        g_ret = selecter.visibleToUser(true).findOne(10);
        if (g_ret != null) {
            if (isclick) {
                g_ret.click();
            }
            return true;
        }
    } catch (e) {
        log(e);
    }
    return false;
};
common.findNodeXY = function (selecter, isclick) {   //text("在线")    textContains("在线")    desc("在线")    descContains("在线")
    let g_ret = null;
    try {
        g_ret = selecter.visibleToUser(true).findOne(10);
        if (g_ret != null) {
            if (isclick) {
                g_ret = g_ret.bounds(); sleep(20);
                click(g_ret.centerX(), g_ret.centerY());
            }
            return true;
        }
    } catch (e) {
        log(e);
    }
    return false;
};
common.foreachClick = function (node) {
    if (!node) return "";
    if (node.clickable()) {
        return node;
    } else {
        if (!node.parent()) return "";
        return foreachClick(node.parent());
    }
};
/**
 *
 * @param {*} userInfo 
 *  userInfo.huozanNumber  //喜欢数
    userInfo.concernNumber = //点赞数
    userInfo.friendNumber =  //粉丝数

    userInfo.name  //名字 唯一标识
    userInfo.account  //账号唯一标识
    userInfo.synopsis  //概要
    userInfo.gender  // 性别
    userInfo.age  //年龄
    userInfo.address //地址 infos[5]
    userInfo.school  // 学习 infos[6]
 */
common.saveInfo =function (userInfo){
  var qurl = common.origin + "/appuser/update";
    userInfo.userId = common.userCode;
    userInfo.deviceCode=common.getDeviceCode();
    try {
      var r = http.postJson(qurl, userInfo);
      console.log(r.body.json());
    } catch (error) {
      console.log(error);      
    }
}
common.checkFile = function(dirPath){
    files.ensureDir(dirPath);
    if (!files.exists(dirPath)) {
        files.create(dirPath);
    }
}


module.exports = common