"""This module provides a macro to support Webpack-style SCSS imports for elements-sk styles.

This module will be removed once the migration off Webpack is complete.
"""

def generate_tilde_prefixed_elements_sk_scss_files(name):
    """Copies @npm//:node_modules/elements-sk/**/*.scss files into //_bazel_bin/~elemnts-sk.

    This macro adds support for tilde-prefixed Sass imports of elements-sk styles, e.g.:

    ```
    @import '~elements-sk/themes/themes';
    ```

    The output of this macro is a filegroup with the generated tilde-prefixed SCSS files. Do not use
    directly; client code should use the //infra-sk:elements-sk_scss sass_library target instead.

    This hack is necessary to maintain compatibility with the Webpack build, which uses the
    css-loader plugin to inline CSS imports. Said plugin adds all NPM packages to the Sass compiler
    import path, prefixed with "~". See https://webpack.js.org/loaders/css-loader/#import for more.

    This macro will be removed once we're completely off Webpack, and all our SCSS imports have been
    rewritten using the conventional (i.e. non-Webpack) syntax.

    Args:
        name: Name of the output filegroup which will contain the tilde-prefixed SCSS files.
    """

    scss_files = [
        # To regenerate this list, please run the following Bash command:
        #
        #   $ find node_modules/elements-sk -name "*.scss" \
        #       | sed -E "s/(.*)/@npm\/\/:\\1/" \
        #       | sort
        "@npm//:node_modules/elements-sk/checkbox-sk/checkbox-sk.scss",
        "@npm//:node_modules/elements-sk/collapse-sk/collapse-sk.scss",
        "@npm//:node_modules/elements-sk/colors.scss",
        "@npm//:node_modules/elements-sk/error-toast-sk/error-toast-sk.scss",
        "@npm//:node_modules/elements-sk/icon/icon-sk.scss",
        "@npm//:node_modules/elements-sk/multi-select-sk/multi-select-sk.scss",
        "@npm//:node_modules/elements-sk/nav-links-sk/nav-links-sk.scss",
        "@npm//:node_modules/elements-sk/radio-sk/radio-sk.scss",
        "@npm//:node_modules/elements-sk/select-sk/select-sk.scss",
        "@npm//:node_modules/elements-sk/spinner-sk/spinner-sk.scss",
        "@npm//:node_modules/elements-sk/styles/buttons/buttons.scss",
        "@npm//:node_modules/elements-sk/styles/select/select.scss",
        "@npm//:node_modules/elements-sk/styles/table/table.scss",
        "@npm//:node_modules/elements-sk/tabs-panel-sk/tabs-panel-sk.scss",
        "@npm//:node_modules/elements-sk/tabs-sk/tabs-sk.scss",
        "@npm//:node_modules/elements-sk/themes/color-palette.scss",
        "@npm//:node_modules/elements-sk/themes/themes.scss",
        "@npm//:node_modules/elements-sk/toast-sk/toast-sk.scss",
    ]

    tilde_prefixed_scss_files = [
        f.replace("@npm//:node_modules/elements-sk", "~elements-sk")
        for f in scss_files
    ]

    # Copy each SCSS file into its tilde-prefixed location.
    for scss_file, tilde_prefixed_scss_file in zip(scss_files, tilde_prefixed_scss_files):
        native.genrule(
            name = tilde_prefixed_scss_file.replace("/", "__"),  # No slashes on build target names.
            srcs = [scss_file],
            outs = [tilde_prefixed_scss_file],
            cmd = "cp $< $@",
        )

    # Do not use directly. Use //infra-sk:elements-sk_scss instead, which includes these files.
    native.filegroup(
        name = name,
        srcs = tilde_prefixed_scss_files,
        visibility = ["//infra-sk:__pkg__"],
    )
