import xbmc
import xbmcgui
import xbmcvfs
import resources.lib.tinyurl as tinyurl
import resources.lib.utils as utils
from resources.lib.dropbox import client, rest, session
from resources.lib.pydrive.auth import GoogleAuth
from resources.lib.pydrive.drive import GoogleDrive

class DropboxAuthorizer:
    APP_KEY = ""
    APP_SECRET = ""
    
    def __init__(self):
        self.APP_KEY = utils.getSetting('dropbox_key')
        self.APP_SECRET = utils.getSetting('dropbox_secret')

    def setup(self):
        result = True
        
        if(self.APP_KEY == '' and self.APP_SECRET == ''):
            #we can't go any farther, need these for sure
            xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30027) + ' ' + utils.getString(30058),utils.getString(30059))

            result = False
            
        return result    

    def isAuthorized(self):
        user_token_key,user_token_secret = self._getToken()

        return user_token_key != '' and user_token_secret != ''        

    def authorize(self):
        result = True

        if(not self.setup()):
            return False
        
        if(self.isAuthorized()):
            #delete the token to start over
            self._deleteToken()

        sess = session.DropboxSession(self.APP_KEY,self.APP_SECRET,"app_folder")

        token = sess.obtain_request_token()
        url = sess.build_authorize_url(token)

        #print url in log
        utils.log("Authorize URL: " + url)
        xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30056),utils.getString(30057),tinyurl.shorten(url))
            
        #if user authorized this will work
        user_token = sess.obtain_access_token(token)
        self._setToken(user_token.key,user_token.secret)

        return result;

    #return the DropboxClient, or None if can't be created
    def getClient(self):
        result = None
        sess = session.DropboxSession(self.APP_KEY,self.APP_SECRET,"app_folder")
        user_token_key,user_token_secret = self._getToken()

        if(user_token_key != '' and user_token_secret != ''):
            #create the client
            sess.set_token(user_token_key,user_token_secret)
            result = client.DropboxClient(sess)

            try:
                utils.log(str(result.account_info()))
            except:
                #this didn't work, delete the token file
                self._deleteToken()
                
        return result

    def _setToken(self,key,secret):
        #write the token files
        token_file = open(xbmc.translatePath(utils.data_dir() + "tokens.txt"),'w')
        token_file.write("%s|%s" % (key,secret))
        token_file.close()

    def _getToken(self):
        #get tokens, if they exist
        if(xbmcvfs.exists(xbmc.translatePath(utils.data_dir() + "tokens.txt"))):
            token_file = open(xbmc.translatePath(utils.data_dir() + "tokens.txt"))
            key,secret = token_file.read().split('|')
            token_file.close()

            return [key,secret]
        else:
            return ["",""]
        
    def _deleteToken(self):
        if(xbmcvfs.exists(xbmc.translatePath(utils.data_dir() + "tokens.txt"))):
            xbmcvfs.delete(xbmc.translatePath(utils.data_dir() + "tokens.txt"))

class GoogleDriveAuthorizer:
    CLIENT_ID = ''
    CLIENT_SECRET = ''
    
    def __init__(self):
        self.CLIENT_ID = utils.getSetting('google_drive_id')
        self.CLIENT_SECRET = utils.getSetting('google_drive_secret')

    def setup(self):
        result = True
        
        if(self.CLIENT_ID == '' and self.CLIENT_SECRET == ''):
            #we can't go any farther, need these for sure
            xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30098) + ' ' + utils.getString(30058),utils.getString(30108))
        result = False

        return result
        
    def isAuthorized(self):
        return xbmcvfs.exists(xbmc.translatePath(utils.data_dir() + "google_drive.dat"))
    
    def authorize(self):
        result = True

        if(not self.setup()):
            return False

        #create authorization helper and load default settings
        gauth = GoogleAuth(xbmc.validatePath(xbmc.translatePath(utils.addon_dir() + '/resources/lib/pydrive/settings.yaml')))
        gauth.LoadClientConfigSettings()

        settings = {"client_id":self.CLIENT_ID,'client_secret':self.CLIENT_SECRET}
    
        drive_url = gauth.GetAuthUrl(settings)
    
        utils.log("Google Drive Authorize URL: " + drive_url)

        xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30056),utils.getString(30102),tinyurl.shorten(drive_url))
        code = xbmcgui.Dialog().input(utils.getString(30103))

        gauth.Auth(code)
        gauth.SaveCredentialsFile(xbmc.validatePath(xbmc.translatePath(utils.data_dir() + 'google_drive.dat')))

        return result

    def getClient(self):
        #create authorization helper and load default settings
        gauth = GoogleAuth(xbmc.validatePath(xbmc.translatePath(utils.addon_dir() + '/resources/lib/pydrive/settings.yaml')))
        gauth.LoadClientConfigSettings()

        gauth.LoadCredentialsFile(xbmc.validatePath(xbmc.translatePath(utils.data_dir() + 'google_drive.dat')))

        result = GoogleDrive(gauth)

        return result


    

@@ -3804,32 +3804,36 @@
 30108))%0A        
+    
 result = False%0A%0A

indent error - always returned false