# -*- coding: utf-8 -*-

import re
import time
import xml.dom.minidom as dom

import BeautifulSoup

from module.plugins.internal.Account import Account


class AlldebridCom(Account):
    __name__    = "AlldebridCom"
    __type__    = "account"
    __version__ = "0.27"
    __status__  = "testing"

    __description__ = """AllDebrid.com account plugin"""
    __license__     = "GPLv3"
    __authors__     = [("Andy Voigt", "spamsales@online.de")]


    def grab_info(self, user, password, data, req):
        data = self.get_data(user)
        html = self.load("http://www.alldebrid.com/account/")
        soup = BeautifulSoup.BeautifulSoup(html)

        #: Try to parse expiration date directly from the control panel page (better accuracy)
        try:
            time_text = soup.find('div', attrs={'class': 'remaining_time_text'}).strong.string

            self.log_debug("Account expires in: %s" % time_text)

            p = re.compile('\d+')
            exp_data = p.findall(time_text)
            exp_time = time.time() + int(exp_data[0]) * 24 * 60 * 60 + int(
                exp_data[1]) * 60 * 60 + (int(exp_data[2]) - 1) * 60

        #: Get expiration date from API
        except Exception:
            data = self.get_data(user)
            html = self.load("https://www.alldebrid.com/api.php",
                             get={'action': "info_user",
                                  'login' : user,
                                  'pw'    : password})

            self.log_debug(html)

            xml = dom.parseString(html)
            exp_time = time.time() + int(xml.getElementsByTagName("date")[0].childNodes[0].nodeValue) * 24 * 60 * 60

        return {'validuntil' : exp_time,
                'trafficleft': -1      ,
                'premium'    : True    }


    def login(self, user, password, data, req):
        html = self.load("https://www.alldebrid.com/register/",
                         get={'action'        : "login",
                              'login_login'   : user,
                              'login_password': password})

        if "This login doesn't exist" in html \
           or "The password is not valid" in html \
           or "Invalid captcha" in html:
            self.fail_login()