##############################################################################
# Common
##############################################################################

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

# gazelle:ignore
proto_library(
    name = "proto",
    srcs = [
        "attestation.proto",
        "beacon_chain.proto",
        "events.proto",
        "node.proto",
        "validator.proto",
        ":ssz_proto_files",
    ],
    visibility = ["//visibility:public"],
    deps = [
        "//proto/engine/v1:proto",
        "//proto/eth/ext:proto",
        "@com_google_protobuf//:descriptor_proto",
        "@com_google_protobuf//:timestamp_proto",
    ],
)

##############################################################################
# Go
##############################################################################
load("@io_bazel_rules_go//go:def.bzl", "go_library")
load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
load("//proto:ssz_proto_library.bzl", "ssz_proto_files")
load("//tools:ssz.bzl", "SSZ_DEPS", "ssz_gen_marshal")

ssz_gen_marshal(
    name = "ssz_generated_files",
    go_proto = ":go_proto",
    out = "gateway.ssz.go",
    includes = [
        "//consensus-types/primitives:go_default_library",
        "//proto/engine/v1:go_default_library",
    ],
    objs = [
        "AggregateAttestationAndProof",
        "Attestation",
        "AttestationData",
        "AttesterSlashing",
        "BeaconBlock",
        "BeaconBlockHeader",
        "Checkpoint",
        "Deposit",
        "DepositData",
        "Eth1Data",
        "IndexedAttestation",
        "ProposerSlashing",
        "SignedAggregateAttestationAndProof",
        "SignedBeaconBlock",
        "SignedBeaconBlockHeader",
        "SignedVoluntaryExit",
        "SyncAggregate",
        "Validator",
        "VoluntaryExit",
    ],
)

go_proto_library(
    name = "go_proto",
    compilers = [
        "@com_github_prysmaticlabs_protoc_gen_go_cast//:go_cast_grpc",
    ],
    importpath = "github.com/prysmaticlabs/prysm/v5/proto/eth/v1",
    proto = ":proto",
    visibility = ["//visibility:public"],
    deps = [
        "//consensus-types/primitives:go_default_library",
        "//proto/engine/v1:go_default_library",
        "//proto/eth/ext:go_default_library",
        "@com_github_golang_protobuf//proto:go_default_library",
        "@com_github_prysmaticlabs_go_bitfield//:go_default_library",  # keep
        "@io_bazel_rules_go//proto/wkt:descriptor_go_proto",
        "@io_bazel_rules_go//proto/wkt:timestamp_go_proto",
        "@org_golang_google_protobuf//types/descriptorpb:go_default_library",
        "@org_golang_google_protobuf//types/known/timestamppb:go_default_library",
    ],
)

go_library(
    name = "go_default_library",
    srcs = [
        ":ssz_generated_files",
    ],
    embed = [
        ":go_proto",
    ],
    importpath = "github.com/prysmaticlabs/prysm/v5/proto/eth/v1",
    visibility = ["//visibility:public"],
    deps = SSZ_DEPS + [
        "@org_golang_google_protobuf//types/descriptorpb",
    ],
)

ssz_proto_files(
    name = "ssz_proto_files",
    srcs = [
        "beacon_block.proto",
    ],
    config = select({
        "//conditions:default": "mainnet",
        "//proto:ssz_mainnet": "mainnet",
        "//proto:ssz_minimal": "minimal",
    }),
)
