#!/usr/bin/env bash
set -exuo pipefail

if ! which mockgen > /dev/null; then
  if [ -z ${GOPATH+somewords} ]; then
    export GOPATH="$HOME"/go;
  fi

  echo "Try to install mockgen"
  GO111MODULE=on go install github.com/golang/mock/mockgen@v1.6.0
  export PATH=$PATH:$GOPATH/bin
fi


for f in ./core_ctx/domain/repo/*.go; do
  filename=$(basename -s .go "$f")
  [[ ! $f == *"_test.go" ]] && mockgen -source="$f" -destination "./core_ctx/domain/repo/mock_repo/mock_$filename.go" -package mock_repo
done


for f in ./core_ctx/domain/facade/*.go; do
  filename=$(basename -s .go "$f")
  [[ ! $f == *"_test.go" ]] && mockgen -source="$f" -destination "./core_ctx/domain/facade/mock_facade/mock_$filename.go" -package mock_facade
done


for f in ./core_ctx/domain/service/*/*.go; do
  filename=$(basename -s .go "$f")
  submodule_name=$(dirname "$f" | awk -F '/' '{print $NF}')

  [[ (! $f == *"_test.go") && $submodule_name != "mock_service" ]] && \
    mockgen -source="$f" -destination "./core_ctx/domain/service/mock_service/mock_$filename.go" -package mock_service
done


#### internal use ####
for f in \
  "./core_ctx/application/cmd/cluster/cluster_common.go" \
  "./core_ctx/application/cmd/profile/sync_infra_profile.go" \
  "./core_ctx/application/cmd/measure/record_metering.go" \
  "./core_ctx/domain/service/network/network_common.go" \
  ; do
  filename=$(basename -s .go "$f")
  directory=$(dirname "$f")
  submodule_name=$(dirname "$f" | awk -F '/' '{print $NF}')
  mockgen -source="$f" -destination "${directory}/mock_${filename}.go" -package ${submodule_name}
done

# eventbus
mockgen -destination "./core_ctx/application/cmd/consumer/mock_eventbus.go"   -package consumer github.com/tidbcloud/tiinf/transport/tieventbus Eventbus


#
exit 0
