#!/usr/bin/env python3
#
# Copyright (c) 2022 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0

"""
Utilities for MIPI Sys-T Collateral XML data
"""

from xml.sax.saxutils import escape


XML_HEADER = """
<?xml version="1.0" encoding="utf-8"?>
<syst:Collateral xmlns:syst="http://www.mipi.org/1.0/sys-t"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.mipi.org/1.0/sys-t
                        https://www.mipi.org/schema/sys-t/sys-t_1-0.xsd">

  <syst:Client>
"""

XML_FOOTER = """
  </syst:Client>

</syst:Collateral>
"""

XML_MODULE_HEADER = """
    <syst:Modules>"""

XML_MODULE_EACH = """
      <syst:Module ID="{0}"><![CDATA[{1}]]></syst:Module>"""

XML_MODULE_FOOTER = """
    </syst:Modules>
"""

XML_CATALOG32_HEADER = """
    <syst:Catalog32>"""

XML_CATALOG32_EACH = """
      <syst:Format ID="0x{0:08x}"><![CDATA[{1}]]></syst:Format>"""

XML_CATALOG32_FOOTER = """
    </syst:Catalog32>
"""

XML_CATALOG64_HEADER = """
    <syst:Catalog64>"""

XML_CATALOG64_EACH = """
      <syst:Format ID="0x{0:016x}"><![CDATA[{1}]]></syst:Format>"""

XML_CATALOG64_FOOTER = """
    </syst:Catalog64>
"""

XML_GUIDS = """
    <syst:Guids>
      <syst:Guid ID="{00000000-0000-0000-0000-000000000000}"><![CDATA[Zephyr]]></syst:Guid>
    </syst:Guids>
"""


def __gen_syst_modules(database):
    """
    Generate syst:Modules, which corresponds to log source ID and name
    """
    if 'log_subsys' not in database.database:
        return ""

    if 'log_instances' not in database.database['log_subsys']:
        return ""

    instances = database.database['log_subsys']['log_instances']

    if not instances:
        # Empty dictionary: no instances
        return ""

    xml = XML_MODULE_HEADER

    for _, one_inst in instances.items():
        xml += XML_MODULE_EACH.format(one_inst['source_id'], escape(one_inst['name']))

    xml += XML_MODULE_FOOTER

    return xml


def __gen_syst_catalog(database):
    """
    Generate syst:Catalog, which corresponds to log strings
    """
    if not database.has_string_mappings():
        return ""

    if database.is_tgt_64bit():
        xml = XML_CATALOG64_HEADER
        fmt = XML_CATALOG64_EACH
    else:
        xml = XML_CATALOG32_HEADER
        fmt = XML_CATALOG32_EACH

    for addr, one_str in database.get_string_mappings().items():
        xml += fmt.format(addr, escape(one_str))

    if database.is_tgt_64bit():
        xml += XML_CATALOG64_FOOTER
    else:
        xml += XML_CATALOG32_FOOTER

    return xml


def gen_syst_xml_file(database):
    """
    Generate MIPI Sys-T Collateral XML data
    """
    xml = XML_HEADER

    xml += XML_GUIDS

    xml += __gen_syst_modules(database)

    xml += __gen_syst_catalog(database)

    xml += XML_FOOTER

    return xml
