COMPILE_DEPS = [
    '//lib:CORE_DEPS',
]


PI_BASEURL = 'https://github.com/p4lang/PI.git'
PROTOBUF_BASEURL = 'https://github.com/google/protobuf.git'

PROTOC_VER = '3.3.0'
GRPC_VER = '1.3.0'

PROTOC_EXE_BASEURL = 'http://central.maven.org/maven2/com/google/protobuf/protoc/'
GRPC_JAVA_BASEURL = 'http://central.maven.org/maven2/io/grpc/protoc-gen-grpc-java/'


PROTOC_SHA1S = {
    'protoc-3.3.0-linux-x86_64.exe':'e6a95fc7477c602cc402ed976d3edbd82c841879',
    'protoc-3.3.0-osx-x86_64.exe':'3070e439f9557bb72fb04df631f29d7556c9029c'
}

GRPC_JAVA_SHA1S = {
    'protoc-gen-grpc-java-1.3.0-linux-x86_64.exe':'44a0fa3e6074852ea84f93d258233b3f4f6d9e53',
    'protoc-gen-grpc-java-1.3.0-osx-x86_64.exe':'61a1b81b9f0af7d0900c314a4201972b52fb5f12'
}


GRPC_DEPS = [
    '//lib:grpc-core-' + GRPC_VER,
    '//lib:grpc-protobuf-' + GRPC_VER,
    '//lib:grpc-stub-' + GRPC_VER,
    '//lib:grpc-netty-' + GRPC_VER,
    '//lib:grpc-auth-' + GRPC_VER,
    '//lib:protobuf-java-' + PROTOC_VER,
]


def get_arch():
    import platform
    os_name = platform.system().lower()
    if os_name == 'darwin':
        os_name = 'osx'
    arch = '%s-%s' % (os_name, platform.machine())
    return arch

# TODO: defs to download prebuilt protoc and grpc java plugin should visible by other BUCK files.

def prebuilt_protoc():
    fname = 'protoc-%s-%s.exe' % (PROTOC_VER, get_arch())
    if fname not in PROTOC_SHA1S:
        raise Exception('Cannot download %s, architecture not supported' % fname)
    remote_file(
        name = 'protoc-binary',
        out = 'protoc.binary',
        url = PROTOC_EXE_BASEURL + PROTOC_VER + '/' + fname,
        sha1 = PROTOC_SHA1S[fname],
    )
    genrule (
        name = 'protoc-exe',
        srcs = [ ':protoc-binary' ],
        bash = 'cp $(location :protoc-binary) $OUT && chmod +x $OUT',
        executable = True,
        out = 'protoc.exe'
    )


def prebuilt_protoc_java_plugin():
    arch = get_arch()
    fname = 'protoc-gen-grpc-java-%s-%s.exe' % (GRPC_VER, get_arch())
    if fname not in GRPC_JAVA_SHA1S:
        raise Exception('Cannot download %s, architecture not supported' % fname)
    remote_file(
        name = 'grpc-java-binary',
        out = 'grpc-java.binary',
        url = GRPC_JAVA_BASEURL + GRPC_VER + '/' + fname,
        sha1 = GRPC_JAVA_SHA1S[fname],
    )
    genrule (
        name = 'grpc-java-exe',
        srcs = [ ':grpc-java-binary' ],
        bash = 'cp $(location :grpc-java-binary) $OUT && chmod +x $OUT',
        executable = True,
        out = 'grpc-java.exe'
    )

prebuilt_protoc()
prebuilt_protoc_java_plugin()

genrule (
    name = 'p4lang-pi-repo',
    # FIXME: should download a specific commit id/tag of p4runtime, right now we get the master.
    bash = 'git clone --quiet ' + PI_BASEURL + ' $OUT > /dev/null && cd $OUT && '
            + 'git submodule update --quiet --init --recursive > /dev/null',
    out = 'repo',
)

genrule (
    name = 'protoc-repo',
    bash = 'git clone --quiet ' + PROTOBUF_BASEURL + ' $OUT > /dev/null && cd $OUT && '
            + 'git checkout --quiet -b x tags/v' + PROTOC_VER + ' > /dev/null',
    out = 'repo',
)

def protoc_gen(
        name,
        proto_file,
        out_pkg,
    ):
    genrule(
        name = name + '-gen',
        cmd = '$(exe :protoc-exe) --plugin=protoc-gen-grpc-java=$(location :grpc-java-exe) '
            + '--grpc-java_out=$SRCDIR/../' + name + '-gen '
            + '--java_out=$SRCDIR/../' + name + '-gen '
            + '-I$(location :p4lang-pi-repo)/proto '
            + '-I$(location :protoc-repo)/src '
            + proto_file,
        out = out_pkg,
    )
    zip_file(
        name = name,
        out = name + '.src.zip',
        srcs = [':'+name+'-gen']
    )

# Wondering which .proto files to build? Check p4runtime's Makefile:
# https://github.com/p4lang/PI/blob/master/proto/Makefile.am
protoc_gen(
    name = 'p4runtime',
    proto_file = '$(location :p4lang-pi-repo)/proto/p4/p4runtime.proto',
    out_pkg = 'p4',
)
protoc_gen(
    name = 'p4info',
    proto_file = '$(location :p4lang-pi-repo)/proto/p4/config/p4info.proto',
    out_pkg = 'p4',
)
protoc_gen(
    name = 'google-rpc-status',
    proto_file = '$(location :p4lang-pi-repo)/proto/google/rpc/status.proto',
    out_pkg = 'com',
)
protoc_gen(
    name = 'google-rpc-code',
    proto_file = '$(location :p4lang-pi-repo)/proto/google/rpc/code.proto',
    out_pkg = 'com',
)
protoc_gen(
    name = 'p4config',
    proto_file = '$(location :p4lang-pi-repo)/proto/p4/tmp/p4config.proto',
    out_pkg = 'p4',
)


osgi_jar(
    srcs = [':p4runtime', ':p4info', ':google-rpc-status', ':google-rpc-code', ':p4config'],
    deps = COMPILE_DEPS + GRPC_DEPS,
    do_javadocs = False,
    do_checkstyle = False
)


project_config(
    src_target = ':onos-drivers-p4runtime-proto'
)