# -*- coding: utf-8 -*-
import cookielib, urllib2, re, urllib
from resources.modules import client
ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:61.0) Gecko/20100101 Firefox/61.0"


def test_video(url):
    data = client.request(url)
    if 'We’re Sorry!' in data:
        data = client.request(url.replace("/embed/", "/f/"))
        if 'We’re Sorry!' in data:
            return False, "[Openload] No file available"
    return True, ""


def get_video_openload(url):
    data = client.request(url, headers={'User-Agent': ua})
    try:
        try:
            code = re.findall('p id="[^"]+" style="">(.*?)<\/p', data, flags=re.DOTALL)[0]
        except IndexError:
            code = re.findall('<p style="" id="[^"]+">(.*?)</p>', data, flags=re.DOTALL)[0]
        _0x59ce16 = eval(re.findall('_0x59ce16=([^;]+)', data)[0].replace('parseInt', 'int'))
        _1x4bfb36 = eval(re.findall('_1x4bfb36=([^;]+)', data)[0].replace('parseInt', 'int'))
        parseInt = eval(re.findall('_0x30725e,(\(parseInt.*?)\),', data)[0].replace('parseInt', 'int'))
        link = decode(code, parseInt, _0x59ce16, _1x4bfb36)
        link = read_openload(link)
        return '%s|User-Agent=%s&Referer=%s' % (link, urllib.quote_plus(ua), urllib.quote_plus(url))
    except:
        return ''



def read_openload(url):
    default_headers = dict()
    default_headers[
        "User-Agent"] = "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3163.100 Safari/537.36"
    default_headers["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"
    default_headers["Accept-Language"] = "es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3"
    default_headers["Accept-Charset"] = "UTF-8"
    default_headers["Accept-Encoding"] = "gzip"
    cj = cookielib.MozillaCookieJar()
    request_headers = default_headers.copy()
    url = urllib.quote(url, safe="%/:=&?~#+!$,;'@()*[]")
    handlers = [urllib2.HTTPHandler(debuglevel=False)]
    handlers.append(NoRedirectHandler())
    handlers.append(urllib2.HTTPCookieProcessor(cj))
    opener = urllib2.build_opener(*handlers)
    req = urllib2.Request(url, None, request_headers)
    handle = opener.open(req, timeout=None)

    return handle.headers.dict.get('location')


def decode(code, parseInt, _0x59ce16, _1x4bfb36):
    import math

    _0x1bf6e5 = ''
    ke = []

    for i in range(0, len(code[0:9 * 8]), 8):
        ke.append(int(code[i:i + 8], 16))

    _0x439a49 = 0
    _0x145894 = 0

    while _0x439a49 < len(code[9 * 8:]):
        _0x5eb93a = 64
        _0x896767 = 0
        _0x1a873b = 0
        _0x3c9d8e = 0
        while True:
            if _0x439a49 + 1 >= len(code[9 * 8:]):
                _0x5eb93a = 143;

            _0x3c9d8e = int(code[9 * 8 + _0x439a49:9 * 8 + _0x439a49 + 2], 16)
            _0x439a49 += 2

            if _0x1a873b < 6 * 5:
                _0x332549 = _0x3c9d8e & 63
                _0x896767 += _0x332549 << _0x1a873b
            else:
                _0x332549 = _0x3c9d8e & 63
                _0x896767 += int(_0x332549 * math.pow(2, _0x1a873b))

            _0x1a873b += 6
            if not _0x3c9d8e >= _0x5eb93a: break

        # _0x30725e = _0x896767 ^ ke[_0x145894 % 9] ^ _0x59ce16 ^ parseInt ^ _1x4bfb36
        _0x30725e = _0x896767 ^ ke[_0x145894 % 9] ^ parseInt ^ _1x4bfb36
        _0x2de433 = _0x5eb93a * 2 + 127

        for i in range(4):
            _0x3fa834 = chr(((_0x30725e & _0x2de433) >> (9 * 8 / 9) * i) - 1)
            if _0x3fa834 != '$':
                _0x1bf6e5 += _0x3fa834
            _0x2de433 = (_0x2de433 << (9 * 8 / 9))

        _0x145894 += 1


    url = "https://openload.co/stream/%s?mime=true" % _0x1bf6e5
    return url


class NoRedirectHandler(urllib2.HTTPRedirectHandler):
    def http_error_302(self, req, fp, code, msg, headers):
        infourl = urllib.addinfourl(fp, headers, req.get_full_url())
        infourl.status = code
        infourl.code = code
        return infourl

    http_error_300 = http_error_302
    http_error_301 = http_error_302
    http_error_303 = http_error_302
    http_error_307 = http_error_302