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

import re

from module.plugins.Hoster import Hoster


class FileApeCom(Hoster):
    __name__ = "FileApeCom"
    __type__ = "hoster"
    __pattern__ = r"http://(www\.)?fileape\.com/(index\.php\?act=download\&id=|dl/)\w+"
    __version__ = "0.11"
    __description__ = """FileApe Download Hoster"""
    __author_name__ = ("espes")

    def setup(self):
        self.multiDL = False
        self.html = None

    def process(self, pyfile):
        self.pyfile = pyfile

        self.html = self.load(self.pyfile.url)

        if "This file is either temporarily unavailable or does not exist" in self.html:
            self.offline()

        self.html = self.load(self.pyfile.url + "&g=1")

        continueMatch = re.search(r"window\.location = '(http://.*?)'", self.html)
        if not continueMatch:
            continueMatch = re.search(r"'(http://fileape\.com/\?act=download&t=[A-Za-z0-9_-]+)'", self.html)
        if continueMatch:
            continuePage = continueMatch.group(1)
        else:
            self.fail("Plugin Defect")

        wait = 60
        waitMatch = re.search(
            "id=\"waitnumber\" style=\"font-size:2em; text-align:center; width:33px; height:33px;\">(\\d+)</span>",
            self.html)
        if waitMatch:
            wait = int(waitMatch.group(1))
        self.setWait(wait + 3)
        self.wait()

        self.html = self.load(continuePage)
        linkMatch = \
            re.search(r"<div style=\"text-align:center; font-size: 30px;\"><a href=\"(http://.*?)\"", self.html)
        if not linkMatch:
            linkMatch = re.search(r"\"(http://tx\d+\.fileape\.com/[a-z]+/.*?)\"", self.html)
        if linkMatch:
            link = linkMatch.group(1)
        else:
            self.fail("Plugin Defect")

        pyfile.name = link.rpartition('/')[2]

        self.download(link)

        check = self.checkDownload({"exp": "Download ticket expired"})
        if check == "exp":
            self.logInfo("Ticket expired, retrying...")
            self.retry()