import json
import requests
import os
import dotenv
from helpers.environment import get_environment

dotenv.load_dotenv()
CLIENT_ID = os.getenv('RESPONSIVE_CLIENT_ID')
CLIENT_SECRET = os.getenv('CLIENT_SECRET')

environment_url = ''

def main():
    global environment_url

    test_users = {
        'users': ['rainforest5@d.com', 'rainforest6@d.com', 'rainforest9@d.com', 'rainforest11@d.com',
                'rainforest20@d.com', 'rainforest21@d.com', 'rainforest22@d.com', 'rainforest23@d.com',
                'rainforest24@d.com', 'rainforest26@d.com', 'rainforest27@d.com', 'rainforest40@d.com',
                'rainforest56@d.com', 'rainforest57@d.com', 'rainforest58@d.com', 'deptester1@d.com'],
        'password': '12345'
    }

    corporate_test_users = {
        'users': ['rainforest.corp1@d.com', 'rainforest.corp3@d.com', "employeelunches1@costcentertest.com"],
        'password': '12345@!'
    }

    environment_url = get_environment()

    print('You are clearing carts for test users in the environment: ' + environment_url)
    answer = input('continue? (Y/n): ').lower().strip()
    
    if answer == 'y' or answer == "Y" or answer == '':
        password = test_users['password']
        for user in test_users['users']:
            clear_user_cart(user, password)
        password = corporate_test_users['password']
        for user in corporate_test_users['users']:
            clear_user_cart(user, password)
    else:
        print('exiting...')


def clear_user_cart(username, password):
    try:
        auth_token = get_auth_token(username, password)
        url = environment_url + '/customer/carts'
        params = {'client_id': CLIENT_ID}
        headers = {'Authorization': auth_token}
        response = requests.delete(url=url, params=params, headers=headers)
        if response.ok:
            print(username + "'s cart has been cleared.")
        else:
            print(f"could not clear {username}'s cart. Response code: {response.status_code}")
    except:
        print("Unexpected error:", sys.exc_info()[0])


def get_auth_token(username, password):
    endpoint = '/api/customer/auth'
    url = environment_url + endpoint
    params = {'client_id': CLIENT_ID}
    data = {'username': username,
            'password': password,
            'g_recaptcha_response': 'null',
            'grant_type': 'password',
            'rememberMe': 'true',
            'scope': 'payment,global',
            'client_secret': CLIENT_SECRET}

    try:
        response = requests.post(url=url, params=params, data=data)
        response.raise_for_status()
        data = json.loads(response.text)
        user_auth_token = response.json()['access_token']
        return user_auth_token
    except (requests.ConnectionError, requests.Timeout):
        raise()
    except Exception as err:
        print(f"Could not clear {username}'s cart. \n{err}")


if __name__ == '__main__':
    main()
