#!/bin/bash -eu


if [ $# -eq 0 ]; then
    SCHEMA='worker'
else
    SCHEMA=$1
fi

if [ $SCHEMA = "worker" ]; then
    IN="schema/workerschema/v1.json"
    OUT="schema/workerschema/v1-json.go"
    GEN="schema/workerschema/v1-gen.go"
    DOC="schema/workerschema/README.md"
    GOPKG="workerschema"
elif [ $SCHEMA = 'admin' ]; then
    IN="schema/adminschema/v1.json"
    OUT="schema/adminschema/v1-json.go"
    GEN="schema/adminschema/v1-gen.go"
    DOC="schema/adminschema/README.md"
    GOPKG="adminschema"
else
    echo "Usage: generator [worker|admin]"
    exit 1
fi

GENDOC=bin/gendoc

if [ ! -f $GENDOC ]; then
    echo "gendoc command line tool not found. please run build script at the top level of this repo"
    exit 1
fi

go run schema/jsonfmt.go $IN

$GENDOC --f $IN --o $DOC

# Though google-api-go-generator is a main, dex vendors the app using the same
# tool it uses to vendor third party packages. Hence, it can be found in the
# "vendor" directory.
#
# This vendoring is currently done with godep, but may change if/when we move to
# another tool.
#
# See schema/generator_import.go for instructions on updating the dependency.
PKG="github.com/coreos/dex/vendor/google.golang.org/api/google-api-go-generator"

# First, write the discovery document into a go file so it can be served statically by the API
cat << EOF > "${OUT}"
package $GOPKG
//
// This file is automatically generated by schema/generator
//
// **** DO NOT EDIT ****
//
EOF

echo -n 'const DiscoveryJSON = `' >> ${OUT}
cat ${IN} >> "${OUT}"
echo -n '`' >> "${OUT}"

# Now build google-api-go-generator - we vendor so this is consistently reproducible
GEN_PATH="bin/google-api-go-generator"
if [ ! -f ${GEN_PATH} ]; then
    go build -o ${GEN_PATH} ${PKG}
fi

# Build the bindings
GOPATH=${PWD}/gopath ./bin/google-api-go-generator \
    -googleapi_pkg "google.golang.org/api/googleapi" \
    -api_json_file "${IN}" \
    -output "${GEN}"

# Finally, fix the import in the bindings to refer to the vendored google-api package
goimports -w ${GEN}

gofmt -w schema/${GOPKG}
