import asyncio.subprocess
import json
import shlex
from types import SimpleNamespace


async def google_auth_credentials(provider):

    if 'cmd-path' not in provider or 'cmd-args' not in provider:
        raise ValueError('GoogleAuth via gcloud is supported! Values for cmd-path, cmd-args are required.')

    cmd = shlex.split(' '.join((provider['cmd-path'], provider['cmd-args'])))
    cmd_exec = asyncio.create_subprocess_exec(*cmd,
                                              stdin=None,
                                              stdout=asyncio.subprocess.PIPE,
                                              stderr=asyncio.subprocess.PIPE)
    proc = await cmd_exec

    data = await proc.stdout.read()
    data = data.decode('ascii').rstrip()
    data = json.loads(data)

    await proc.wait()
    return SimpleNamespace(
        token=data['credential']['access_token'],
        expiry=data['credential']['token_expiry']
    )