import credentials

import config

import twitchAPI
from twitchAPI.pubsub import PubSub
from twitchAPI.twitch import Twitch
from twitchAPI.types import AuthScope
from twitchAPI.oauth import UserAuthenticator
from pprint import pprint
from uuid import UUID

import json
import utilities_script as utility
import os

class Twitch_Credential_Maker():
    def __init__(self):
        super().__init__()
        self.credential : credentials.Twitch_Credential()
        self.twitch : Twitch()
        self.target_scope = [AuthScope.WHISPERS_READ, AuthScope.CHANNEL_READ_REDEMPTIONS, AuthScope.BITS_READ, AuthScope.CHANNEL_READ_SUBSCRIPTIONS]

    def get_tokens(self):
        self.twitch.authenticate_app(self.target_scope)
        for scope_ in self.target_scope:
            print(scope_)
        auth = UserAuthenticator(self.twitch, self.target_scope, force_verify=True)
        token, refresh_token = auth.authenticate()

        if token is not None: print("found token")
        if refresh_token is not None: print("found refresh_token\n")
        print("token: ", token)
        print("refresh_token: ", refresh_token)
        print("")
        return token, refresh_token

    def updateCredentialsFile(self, token, refreshToken):
        dir = utility.get_dir("credentials")
        script_dir = os.path.dirname(__file__) #<-- absolute dir the script is in
        relative_path = "credentials/twitch.json"
        real_file_path = os.path.join(script_dir, relative_path)

        with open(real_file_path, 'r') as cred_r:
            data = json.load(cred_r)
            data['pubsub_AccessToken'] = token
            data['pubsub_RefreshToken'] = refreshToken

        os.remove(real_file_path)
        with open(real_file_path, 'w') as cred_w:
            json.dump(data, cred_w, indent=2)




if __name__ == "__main__":
    testModule = Twitch_Credential_Maker()

    credentials_manager = credentials.Credentials_Module()
    credentials_manager.load_credentials()
    testModule.credential = credentials_manager.find_Twitch_Credential(config.credentialsNickname)
    testModule.twitch = Twitch(testModule.credential.pubsub_client_id, testModule.credential.pubsub_secret)
    #pprint(testModule.twitch.get_users(logins=['thecuriousnerd']))

    token, refreshToken = testModule.get_tokens()
    print("Update credentials file? (y/n)")
    response = input()
    if "y" in response.lower():
        testModule.updateCredentialsFile(token, refreshToken)
    print("Ready to close")
    input()