#!/bin/bash
# Copyright 2022 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Formats source files according to Google's style guide.

REPO=$(dirname "$0")/../../..
OS=$(uname | tr '[:upper:]' '[:lower:]') # The possible values are "linux" and "darwin".

# Run clang-format.
find $REPO/tools/netsim/src \( -name '*.cc' -o -name '*.h' \) \
  -exec clang-format -i {} \;

find $REPO/tools/netsim/proto \( -name '*.proto' \) \
  -exec clang-format -i {} \;

# Format rust.
RUSTFMT=$REPO/prebuilts/rust/$OS-x86/stable/rustfmt
find $REPO/tools/netsim/rust \( \
  -path $REPO/tools/netsim/rust/target -prune -false \
  -o -name '*.rs' \) \
  -exec $RUSTFMT --files-with-diff {} \;

# Format TypeScript.
find $REPO/tools/netsim/ui/ts \( -name '*.ts' \) \
  -exec clang-format -i {} \;

# Format Java (go/google-java-format).
find $REPO/tools/netsim \( -name '*.java' \) \
  -exec google-java-format --dry-run {} \;
find $REPO/tools/netsim \( -name '*.java' \) \
  -exec google-java-format -i {} \;

# Format Python (go/pyformat).
pyformat --in_place --alsologtostderr --noshowprefixforinfo \
  --recursive $REPO/tools/netsim

# Run cmake-format.
find $REPO/tools/netsim \( -name 'CMakeLists.txt' \) \
  -exec cmake-format -i {} \;
find $REPO/tools/netsim/cmake \( -name "*.cmake" \) \
  -exec cmake-format -i {} \;

# Run bpfmt to format Android.bp if in aosp_master repo.
BPFMT=$REPO/prebuilts/build-tools/$OS-x86/bin/bpfmt
if [ -f "$BPFMT" ]; then
  find $find \( -name "Android.bp" \) \
    -exec $BPFMT -w {} \;
fi
