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

from module.plugins.Account import Account

from module.common.json_layer import json_loads

from module.network.HTTPRequest import BadHeader


class ReloadCc(Account):
    __name__ = "ReloadCc"
    __version__ = "0.3"
    __type__ = "account"
    __description__ = """Reload.cc account plugin"""

    __author_name__ = "Reload Team"
    __author_mail__ = "hello@reload.cc"

    def loadAccountInfo(self, user, req):

        # Get user data from reload.cc
        status = self.getAccountStatus(user, req)

        # Parse account info
        account_info = {"validuntil": float(status['msg']['expires']),
                        "pwdhash": status['msg']['hash'],
                        "trafficleft": -1}

        return account_info

    def login(self, user, data, req):

        # Get user data from reload.cc
        status = self.getAccountStatus(user, req)

        if not status:
            raise Exception("There was an error upon logging in to Reload.cc!")

        # Check if user and password are valid
        if status['status'] != "ok":
            self.wrongPassword()

    def getAccountStatus(self, user, req):
        # Use reload.cc API v1 to retrieve account info and return the parsed json answer
        query_params = dict(
            via='pyload',
            v=1,
            get_traffic='true',
            user=user
        )

        try:
            query_params.update(dict(hash=self.infos[user]['pwdhash']))
        except Exception:
            query_params.update(dict(pwd=self.accounts[user]['password']))

        try:
            answer = req.load("http://api.reload.cc/login", get=query_params)
        except BadHeader, e:
            if e.code == 400:
                raise Exception("There was an unknown error within the Reload.cc plugin.")
            elif e.code == 401:
                self.wrongPassword()
            elif e.code == 402:
                self.expired(user)
            elif e.code == 403:
                raise Exception("Your account is disabled. Please contact the Reload.cc support!")
            elif e.code == 409:
                self.empty(user)
            elif e.code == 503:
                self.logInfo("Reload.cc is currently in maintenance mode! Please check again later.")
                self.wrongPassword()
            return None

        return json_loads(answer)