load("@rules_proto//proto:defs.bzl", "ProtoInfo")

def _proto_docs(ctx):
    protos = [proto[ProtoInfo] for proto in ctx.attr.protos]
    transitive_sources = depset(transitive = [proto.transitive_sources for proto in protos])
    transitive_proto_path = depset(transitive = [proto.transitive_proto_path for proto in protos])

    out = ctx.actions.declare_file(ctx.label.name + ".html")

    args = []
    args.append("--plugin")
    args.append(ctx.executable._protoc_gen_doc.path)
    args.append("--doc_out")
    args.append(out.dirname)
    args.append("--doc_opt=html," + out.basename)

    for include_path in transitive_proto_path.to_list():
        args.append("-I")
        args.append(include_path)

    for src in transitive_sources.to_list():
        # Due to the built-in import path for well-known types (see AddDefaultProtoPaths
        # in @protobuf//src/google/protobuf/compiler:command_line_interface.cc)
        # in protoc the Bazel-generated well-known protos are considered to contain
        #  "duplicate" types.
        # Since generating documentation for well-known types is not that useful just
        # skip them.
        if src.path.find("/external/protobuf~/") != -1:
            continue
        args.append(src.path)

    protoc = ctx.toolchains["@rules_proto//proto:toolchain_type"].proto.proto_compiler.executable

    ctx.actions.run(
        tools = [ctx.executable._protoc_gen_doc],
        inputs = transitive_sources,
        outputs = [out],
        executable = protoc,
        arguments = args,
    )
    return [DefaultInfo(files = depset([out]))]

proto_docs = rule(
    implementation = _proto_docs,
    doc = """
        Generate a single HTML documentation file documenting all types and services from the transitive set of
        Protobuf files referenced by all proto_libraries passed into `protos`.
    """,
    attrs = {
        "protos": attr.label_list(
            doc = "A list of protobuf libraries for which (and their dependencies) documentation should be generated for",
            providers = [ProtoInfo],
            default = [],
        ),
        "_protoc_gen_doc": attr.label(
            default = Label("@com_github_pseudomuto_protoc_gen_doc//cmd/protoc-gen-doc"),
            cfg = "exec",
            executable = True,
            allow_files = True,
        ),
    },
    toolchains = ["@rules_proto//proto:toolchain_type"]
)
