# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# This file should only contain code that will be acceptable in the context of
# a moz.build sandbox.


# This function turns a metrics.yaml path (eg. "dom/push/metrics.yaml") into a
# header file name (eg. "DomPushMetrics").
# Used by both moz.build and build_scripts/glean_parser_ext/run_glean_parser.py
def convert_yaml_path_to_header_name(filepath):
    # The general rule is to remove the yaml extension then add an
    # upper case letter for each folder separator, - or _ character .
    filepath = filepath[: -(len(".yaml"))]
    path_components = filepath.replace("-", "_").split("/")

    # There are some exceptions to make some names shorter nicer:
    #  NameBaseMetrics -> NameMetrics
    #  NameBaseSomethingMetrics -> NameSomethingMetrics
    if path_components[1] == "base":
        path_components.pop(1)
    # NameComponentsSomethingMetrics -> NameSomethingMetrics
    # BrowserComponentsSomethingMetrics -> SomethingMetrics
    # ToolkitComponentsSomethingMetrics -> SomethingMetrics
    if len(path_components) > 3 and path_components[1] == "components":
        path_components.pop(1)
        if path_components[0] in ["browser", "toolkit"]:
            path_components.pop(0)

    # ModulesSomethingMetrics -> SomethingMetrics
    if len(path_components) > 2 and path_components[0] == "modules":
        path_components.pop(0)

    # MobileSharedModulesGeckoviewMetrics -> GeckoviewMetrics
    if filepath.startswith("mobile/shared/modules/") and len(path_components) > 4:
        path_components = ["geckoview", "metrics"]

    path_components = "_".join(path_components).split("_")
    return "".join([
        path_component[0].upper() + path_component[1:]
        for path_component in path_components
    ])
