"""Functions for creating XML output."""
from structlog import get_logger

from passbook.lib.utils.template import render_to_string
from passbook.providers.saml.xml_signing import get_signature_xml

LOGGER = get_logger()


def get_authnrequest_xml(parameters, signed=False):
    """Get AuthN Request XML"""
    # Reset signature.
    params = {}
    params.update(parameters)
    params["AUTHN_REQUEST_SIGNATURE"] = ""

    unsigned = render_to_string("saml/sp/xml/authn_request.xml", params)
    LOGGER.debug("AuthN Request", unsigned=unsigned)
    if not signed:
        return unsigned

    # Sign it.
    signature_xml = get_signature_xml()
    params["AUTHN_REQUEST_SIGNATURE"] = signature_xml
    signed = render_to_string("saml/sp/xml/authn_request.xml", params)

    LOGGER.debug("AuthN Request", signed=signed)
    return signed