#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re
from module.plugins.Hoster import Hoster
from module.plugins.Plugin import chunks
from module.network.RequestFactory import getURL
#from module.BeautifulSoup import BeautifulSoup

def getInfo(urls):
    api_url = "http://www.share.cx/uapi?do=check&links="
    
    for chunk in chunks(urls, 90):
        get = ""
        for url in chunk:
            get += ";"+url
            
        api = getURL(api_url+get[1:])
        result = []
        
        for i, link in enumerate(api.split()):
            url,name,size = link.split(";")
            if name and size:
                status = 2
            else:
                status = 1
                
            if not name: name = chunk[i]
            if not size: size = 0
                
            result.append( (name, size, status, chunk[i]) )
        
        yield result

class ShareCx(Hoster):
    __name__ = "ShareCx"
    __type__ = "hoster"
    __pattern__ = r"http://[\w\.]*?share\.cx/(files|videos)/\d+"
    __version__ = "0.3"
    __description__ = """Share.cx Download Hoster"""
    __author_name__ = ("jeix")
    __author_mail__ = ("jeix@hasnomail.de")


    def init(self):
        if self.account:
            self.multiDL = True
        else:
            self.multiDL = False
                
        
    def process(self, pyfile):
        self.pyfile = pyfile
        self.download_html()
        if not self.file_exists():
            self.offline()
            
        pyfile.name = self.get_file_name()
        if self.account:
            self.handlePremium()
        else:
            self.handleFree()
        
        
    def download_html(self):
        self.html = self.load(self.pyfile.url, cookies=False)

    def handleFree(self):
        """ returns the absolute downloadable filepath
        """
        if self.html is None:
            self.download_html()

        try:
            op          = re.search(r'name="op" value="(.*?)"', self.html).group(1)
            usr_login   = re.search(r'name="usr_login" value="(.*?)"', self.html).group(1)
            id          = re.search(r'name="id" value="(.*?)"', self.html).group(1)
            fname       = re.search(r'name="fname" value="(.*?)"', self.html).group(1)
            referer     = re.search(r'name="referer" value="(.*?)"', self.html).group(1)
            method_free = "Datei+herunterladen"
            
            self.html   = self.load(self.pyfile.url, post={
                    "op" : op,
                    "usr_login" : usr_login,
                    "id" : id,
                    "fname" : fname,
                    "referer" : referer,
                    "method_free" : method_free
                })
        except:
            # looks like we ARE already on page 2
            pass

        m = re.search(r'startTimer\((\d+)\)', self.html)
        if m is not None:
            wait_time = int(m.group(1))
            self.setWait(wait_time)
            self.wantReconnect = True
            self.log.debug("%s: IP blocked wait %d seconds." % (self.__name__, wait_time))
            self.wait()
            self.retry()
            
        m = re.search(r'countdown">.*?(\d+).*?</span>', self.html)
        if m is None:
            m = re.search(r'id="countdown_str".*?<span id=".*?">.*?(\d+).*?</span', self.html)
        if m is not None:
            wait_time = int(m.group(1))
            self.setWait(wait_time)
            self.wantReconnect = False
            self.log.debug("%s: Waiting %d seconds." % (self.__name__, wait_time))
            self.wait()


        op = re.search(r'name="op" value="(.*?)"', self.html).group(1)
        id = re.search(r'name="id" value="(.*?)"', self.html).group(1)
        rand = re.search(r'name="rand" value="(.*?)"', self.html).group(1)
        referer = re.search(r'name="referer" value="(.*?)"', self.html).group(1)
        method_free = re.search(r'name="method_free" value="(.*?)"', self.html).group(1)
        method_premium = re.search(r'name="method_premium" value="(.*?)"', self.html).group(1)
        down_script = re.search(r'name="down_script" value="(.*?)"', self.html)

        data = {
            "op" : op,
            "id" : id,
            "rand" : rand,
            "referer" : referer,
            "method_free" : method_free,
            "method_premium" : method_premium,
            #"down_script" : down_script
        }
        
        if down_script:
            data["down_script"] = down_script.group(1)
        
        if '/captchas/' in self.html:
            captcha_url = re.search(r'(http://(?:[\w\d]+\.)?.*?/captchas/.*?)', self.html).group(1)
            captcha = self.decryptCaptcha(captcha_url)
            data["code"] = captcha
            

        self.download(self.pyfile.url, post=data)

        # soup = BeautifulSoup(html)
        # form = soup.find("form")
        # postfields = {}
        # for input in form,findall("input"):
           # postfields[input["name"]] = input["value"]
        # postfields["method_free"] = "Datei herunterladen"
    
    def get_file_name(self):
        if self.html is None:
            self.download_html()
            
        name = re.search(r'/></span>([^/]+)</h3>', self.html).group(1)
        return name

    def file_exists(self):
        """ returns True or False
        """
        if self.html is None:
            self.download_html()
        
        if re.search(r'File not found<br>It was deleted due to inactivity or abuse request', self.html) is not None:
            return False

        return True

    def handlePremium(self):
        self.download(self.pyfile.url)