#!/bin/bash
#
# Copyright (C) 2020 Google LLC
#
# 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.

###############################################################################
# Input files and output directory: can be customized.
INPUT_CARRIERCONFIG_XML_FILE="packages/apps/CarrierConfig/res/xml/vendor.xml"
INPUT_CARRIERCONFIG_ASSETS_DIR="packages/apps/CarrierConfig/assets"
INPUT_APNS_XML_FILE="device/sample/etc/apns-full-conf.xml"
OUTPUT_DIR="/tmp/CarrierSettings/etc"
###############################################################################

( # start sub-shell so can use 'set -e' to abort on any failure
set -e

# 1. Build tools
echo 'step 1. Building tools ...'
m CarrierConfigConverterV2 update_apn update_carrier_data GenCarrierList GenDeviceSettings
echo 'Done.'

echo 'step 2. Converting config files ...'
# 2a. Create a temp directory as workspace
TMP_DIR=$(mktemp -d -t cs-XXXXXXX)
DATA_SETTING_DIR=$TMP_DIR/data/setting
DATA_DEVICE_DIR=$TMP_DIR/data/device
ASSETS_DIR=$TMP_DIR/assets
INNER_TMP_DIR=$TMP_DIR/tmp
TIER1_CARRIERS_FILE=$TMP_DIR/data/tier1_carriers.textpb
DEVICE_FILE=$DATA_DEVICE_DIR/device.textpb
mkdir -p "$DATA_SETTING_DIR" > /dev/null
mkdir -p "$DATA_DEVICE_DIR" > /dev/null
mkdir -p "$ASSETS_DIR" > /dev/null
mkdir -p "$INNER_TMP_DIR" > /dev/null
touch "$TIER1_CARRIERS_FILE" > /dev/null
touch "$DEVICE_FILE" > /dev/null

# 2b. Copy input files to workspace
cp $INPUT_CARRIERCONFIG_XML_FILE "$TMP_DIR"/vendor.xml > /dev/null
cp $INPUT_CARRIERCONFIG_ASSETS_DIR/* "$ASSETS_DIR"/ > /dev/null
cp $INPUT_APNS_XML_FILE "$TMP_DIR"/apns-full-conf.xml > /dev/null

# 2c. Convert XMLs to TEXTPB

EPOCH=$(date -d '2018-06-01T00:00:00Z' +%s)
NOW=$(date +%s)
TIMESTAMP="$((NOW-EPOCH))"
# Use TIMESTAMP as version number
# To customize the version number, assign the customized value to VERSION.
VERSION="$TIMESTAMP"

SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")"
UPDATE_APN=$SCRIPT_DIR/bin/update_apn
[ -x "$UPDATE_APN" ] || UPDATE_APN=out/host/linux-x86/bin/update_apn
UPDATE_CARRIER_DATA=$SCRIPT_DIR/bin/update_carrier_data
[ -x "$UPDATE_CARRIER_DATA" ] || UPDATE_CARRIER_DATA=out/host/linux-x86/bin/update_carrier_data

# To use multiple vendor.xml files, just provide multiple `--vendor_xml=___.xml`
# lines in the command below. The order decides config precedence: a file is
# overwritten by files AFTER it.
out/host/linux-x86/bin/CarrierConfigConverterV2 \
  --output_dir="$TMP_DIR"/data \
  --vendor_xml="$TMP_DIR"/vendor.xml \
  --assets="$ASSETS_DIR"/ \
  --version=$VERSION > /dev/null
"$UPDATE_APN" \
  --apn_file="$TMP_DIR"/apns-full-conf.xml \
  --data_dir="$TMP_DIR"/data \
  --out_file="$INNER_TMP_DIR"/apns.textpb
"$UPDATE_CARRIER_DATA" \
  --data_dir="$TMP_DIR"/data \
  --in_file="$INNER_TMP_DIR"/apns.textpb

# 2d. Convert TEXTPB to PB
mkdir -p "$INNER_TMP_DIR"/pb > /dev/null
mkdir -p "$INNER_TMP_DIR"/textpb > /dev/null

out/host/linux-x86/bin/GenCarrierList \
  --version_offset=0 \
  --with_version_number \
  --out_pb="$INNER_TMP_DIR"/carrier_list.pb \
  --in_textpbs="$TIER1_CARRIERS_FILE","$TMP_DIR"/data/other_carriers.textpb \
  > /dev/null
mv "$INNER_TMP_DIR"/carrier_list*.pb "$INNER_TMP_DIR"/pb > /dev/null
mv "$INNER_TMP_DIR"/carrier_list.textpb "$INNER_TMP_DIR"/textpb > /dev/null

for device in "$DATA_DEVICE_DIR"/*.textpb; do
  [[ -e "$device" ]] || break
  device=${device%.*} && device=${device##*/} \
  && device_dir="${INNER_TMP_DIR}/${device}" && mkdir -p "${INNER_TMP_DIR}" \
  && mkdir -p "${INNER_TMP_DIR}/textpb/${device}" > /dev/null \
  && out/host/linux-x86/bin/GenDeviceSettings \
  --device_overlay="$DATA_DEVICE_DIR/${device}.textpb" \
  --base_setting_dir="$DATA_SETTING_DIR" \
  --device_setting_dir="${device_dir}" \
  --version_offset=0 \
  --with_device_name="${device}" \
  --with_version_number > /dev/null \
  && mv "${device_dir}"/*.pb "${INNER_TMP_DIR}/pb" > /dev/null \
  && mv "${device_dir}"/*.textpb "${INNER_TMP_DIR}/textpb/${device}" > /dev/null \
  && rmdir "${device_dir}"
done

echo 'Done.'

echo 'step 3. Copy generated files to output directory ...'

mkdir -p $OUTPUT_DIR > /dev/null
rm -rf "${OUTPUT_DIR:?}"/* > /dev/null
cp -r "$INNER_TMP_DIR"/pb  $OUTPUT_DIR > /dev/null
cp -r "$INNER_TMP_DIR"/textpb  $OUTPUT_DIR > /dev/null
rm -rf "${TMP_DIR:?}" > /dev/null

echo 'Generated files:'
find $OUTPUT_DIR -type f

echo 'Done.'
) # end sub-shell
