if (typeof Object.assign != 'function') {
    Object.assign = function () {
        var target = arguments[0];
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) {
                if (Object.prototype.hasOwnProperty.call(source, key)) {
                    target[key] = source[key];
                }
            }
        }
        return target;
    };
}
 if (!String.prototype.includes) {
    String.prototype.includes = function (search, start) {
      if (typeof start !== 'number') {
        start = 0;
      }

      if (start + search.length > this.length) {
        return false;
      } else {
        return this.indexOf(search, start) !== -1;
      }
    };
}

if (!Array.prototype.includes) {
Object.defineProperty(Array.prototype, 'includes', {
  value: function (searchElement, fromIndex) {

    if (this == null) {//this是空或者未定义，抛出错误
      throw new TypeError('"this" is null or not defined');
    }

    var o = Object(this);//将this转变成对象
    var len = o.length >>> 0;//无符号右移0位，获取对象length属性，如果未定义就会变成0

    if (len === 0) {//length为0直接返回false未找到目标值
      return false;
    }

    var n = fromIndex | 0;//查找起始索引
    var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);//计算正确起始索引，因为有可能是负值

    while (k < len) {//从起始索引处开始循环
      if (o[k] === searchElement) {//如果某一位置与寻找目标相等，返回true，找到了
        return true;
      }
      k++;
    }
    return false;//未找到，返回false
  }
});
}
if (typeof String.prototype.startsWith != 'function') {
	String.prototype.startsWith = function (prefix){
		return this.slice(0, prefix.length) === prefix;
	};
}
if (typeof String.prototype.endsWith != 'function') {
	String.prototype.endsWith = function(suffix) {
		return this.indexOf(suffix, this.length - suffix.length) !== -1;
	};
}
Object.prototype.myValues=function(obj){
   if(obj ==null) {
   	 throw new TypeError("Cannot convert undefined or null to object");
   }
   var res=[]
   for(var k in obj){
     if(obj.hasOwnProperty(k)){//需判断是否是本身的属性
   		res.push(obj[k]);
   	 }
   }
   return res;
}
if (typeof Object.prototype.values != 'function') {
	Object.prototype.values=function(obj){
   if(obj ==null) {
   	 throw new TypeError("Cannot convert undefined or null to object");
   }
   var res=[]
   for(var k in obj){
     if(obj.hasOwnProperty(k)){//需判断是否是本身的属性
   		res.push(obj[k]);
   	 }
   }
   return res;
}
}
if (typeof Array.prototype.join != 'function') {
    Array.prototype.join = function (emoji) {
        // emoji = emoji||',';
        emoji = emoji||'';
        let self = this;
        let str = "";
        let i = 0;
        if (!Array.isArray(self)) {throw String(self)+'is not Array'}
        if(self.length===0){return ''}
        if (self.length === 1){return String(self[0])}
        i = 1;
        str = this[0];
        for (; i < self.length; i++) {
            str += String(emoji)+String(self[i]);
        }
        return str;
    };
}

String.prototype.rstrip = function (chars) {
    let regex = new RegExp(chars + "$");
    return this.replace(regex, "");
};

Array.prototype.append = Array.prototype.push;
String.prototype.strip = String.prototype.trim;
function 是否正版(vipUrl){
    let flag = new RegExp('qq\.com|iqiyi\.com|youku\.com|mgtv\.com|bilibili\.com|sohu\.com|ixigua\.com|pptv\.com|miguvideo\.com|le\.com|1905\.com|fun\.tv');
    return  flag.test(vipUrl);
}
function urlDeal(vipUrl){
    if(!vipUrl){
        return ''
    }
    if(!是否正版(vipUrl)){
        return vipUrl
    }
    if(!/miguvideo/.test(vipUrl)){
        vipUrl=vipUrl.split('#')[0].split('?')[0];
    }
    return vipUrl
}
function setResult(d){
    if(!Array.isArray(d)){
        return []
    }
    VODS = [];
    // console.log(JSON.stringify(d));
    d.forEach(function (it){
        let obj = {
            vod_id:it.url||'',
            vod_name: it.title||'',
            vod_remarks: it.desc||'',
            vod_content: it.content||'',
            vod_pic: it.pic_url||it.img||'',
        };
        let keys = Object.keys(it);
        if(keys.includes('tname')){
            obj.type_name = it.tname||'';
        }
        if(keys.includes('tid')){
            obj.type_id = it.tid||'';
        }
        if(keys.includes('year')){
            obj.vod_year = it.year||'';
        }
        if(keys.includes('actor')){
            obj.vod_actor = it.actor||'';
        }
        if(keys.includes('director')){
            obj.vod_director = it.director||'';
        }
        if(keys.includes('area')){
            obj.vod_area = it.area||'';
        }
        VODS.push(obj);
    });
    return VODS
}
function setResult2(res){
    VODS = res.list||[];
    return VODS
}
function setHomeResult(res){
    if(!res||typeof(res)!=='object'){
        return []
    }
    return setResult(res.list);
}
// 千万不要用for in 推荐 forEach (for in 会打乱顺序)
//猫函数
function maoss(jxurl, ref, key) {
    eval(getCryptoJS());
    try {
        var getVideoInfo = function (text) {
                return CryptoJS.AES.decrypt(text, key, {iv: iv, padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);
        };
        var token_key = key == undefined ? 'dvyYRQlnPRCMdQSe' : key;
        if (ref) {
            var html = request(jxurl, {
                headers: {
                    'Referer': ref
                }
            });
        } else {
            var html = request(jxurl);
        }
        // print(html);
        if (html.indexOf('&btwaf=') != -1) {
            html = request(jxurl + '&btwaf' + html.match(/&btwaf(.*?)"/)[1], {
                headers: {
                    'Referer': ref
                }
            })
        }
        var token_iv = html.split('_token = "')[1].split('"')[0];
        var key = CryptoJS.enc.Utf8.parse(token_key);
        var iv = CryptoJS.enc.Utf8.parse(token_iv);
        // log("iv:"+iv);
        //  log(html);
        // print(key);
        // print(iv);
        eval(html.match(/var config = {[\s\S]*?}/)[0] + '');
        // config.url = config.url.replace(/,/g,'');
        // print(config.url);
        if (!config.url.startsWith('http')) {
            //config.url = decodeURIComponent(AES(config.url, key, iv));
            config.url = CryptoJS.AES.decrypt(config.url, key, {
                iv: iv,
                padding: CryptoJS.pad.Pkcs7
            }).toString(CryptoJS.enc.Utf8)
        }
        return config.url;
    } catch (e) {
        return '';
    }
}

function urlencode (str) {
    str = (str + '').toString();
    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
    replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
}
globalThis.VODS = [];// 一级或者搜索需要的数据列表
globalThis.VOD = {};// 二级的单个数据
globalThis.encodeUrl = urlencode;
globalThis.urlencode = urlencode;
globalThis.是否正版 = 是否正版;
globalThis.urlDeal = urlDeal;
globalThis.setResult = setResult;
globalThis.setResult2 = setResult2;
globalThis.setHomeResult = setHomeResult;
globalThis.maoss = maoss;
// globalThis.urljoin2 = joinUrl;

// export default {
//     是否正版:是否正版,
//     urlDeal:urlDeal,
//     setResult:setResult,
//     setResult2:setResult2,
//     setHomeResult:setHomeResult,
//     maoss:maoss,
//     urlencode:urlencode
// }