#!/usr/bin/env python3.8
from cognitoinator import Session
from boto3 import set_stream_logger
from os import environ, path
from logging import getLogger
from json import dumps, loads
from pathlib import Path
import argparse

set_stream_logger(name="botocore")
logger = getLogger("botocore")
logger.setLevel("ERROR")


def get_session():
    if args.cognito_config and args.cognito_profile:
        raise ValueError("Args cognito_config and cognito_profile are mutually exclusive")

    if args.cognito_profile:
        session = Session(cognito_profile=args.cognito_profile, cognito_credentials_file=args.cognito_credentials_file)
    elif args.cognito_config:
        session = Session(cognito_config=loads(args.cognito_config))
    else:
        session = Session()

    return session


def output_credentials():
    credentials = get_session().auth_client.profile_credentials
    print(dumps(credentials))


parser = argparse.ArgumentParser(description="Provide refreshable credentials for an aws profile.")
parser.add_argument(
    "-p",
    "--cognito-profile",
    type=str,
    default=None,
    help="The name of the cognito profile to source for creating a session."
)
parser.add_argument(
    "-f",
    "--cognito-credentials_file",
    type=str,
    default=f"{Path.home()}/.aws/cognito_credentials",
    help="An optional non-standard path to a credentials file. Defaults to ~/.aws/cognito_credentials"
)
parser.add_argument(
    "-c",
    "--cognito-config",
    metavar="c",
    type=str,
    default=None,
    help="A json string containing a cognito config."
)
args = parser.parse_args()

output_credentials()