"""Sigv4 Signing Support"""
# Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy
# of the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "LICENSE.txt" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
# OF ANY KIND, express or implied. See the License for the specific
# language governing permissions and limitations under the License.

import boto3
import botocore
import json


def sigv4_auth(method, host, path, queries, body, headers):
    "Adds authorization headers for sigv4 to headers parameter."
    endpoint = host.replace('https://', '').replace('http://', '')
    _api_id, _service, region, _domain = endpoint.split('.', maxsplit=3)

    request_parameters = '&'.join([f"{k}={v}" for k, v in queries])
    url = f"{host}{path}?{request_parameters}"

    session = botocore.session.Session()
    request = botocore.awsrequest.AWSRequest(method=method,
                                             url=url,
                                             data=json.dumps(body) if body else None)
    botocore.auth.SigV4Auth(session.get_credentials(),
                            "execute-api", region).add_auth(request)
    prepared_request = request.prepare()

    headers['host'] = endpoint.split('/', maxsplit=1)[0]
    for k, value in prepared_request.headers.items():
        headers[k] = value
