#!/usr/bin/env bash

# Copyright 2020 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.

set -e
SCRIPT_PATH=$(realpath $0)

CURL_CMD=curl
SERVER_BASE_URL=https://download.geonames.org/export/dump/
FILES=( \
  cities1000.zip \
  cities15000.zip \
  cities500.zip \
  cities5000.zip \
  readme.txt \
  )

LOCAL_ANDROID_DIR=$(dirname ${SCRIPT_PATH})
LOCAL_ROOT_DIR=$(dirname ${LOCAL_ANDROID_DIR})
LOCAL_DOWNLOAD_DIR=${LOCAL_ROOT_DIR}/export/dump
LOCAL_VERSION_INFO_DIR=${LOCAL_ANDROID_DIR}/version_info
METADATA_FILE=${LOCAL_ROOT_DIR}/METADATA

echo Removing old downloaded files and metadata...
rm ${LOCAL_DOWNLOAD_DIR}/*
rm ${LOCAL_VERSION_INFO_DIR}/*

# Start the METADATA file
cat << EOF > ${METADATA_FILE}
// Generated file DO NOT EDIT
// Run android/download_latest.sh
name: "geonames"
description:
    "Assorted files downloaded from https://www.geonames.org/"

third_party {
  url {
    type: HOMEPAGE
    value: "https://www.geonames.org/"
  }
EOF

DOWNLOAD_DATE=$(date --iso-8601)
for FILE in ${FILES[@]}; do
  URL=${SERVER_BASE_URL}${FILE}
  HEADERS_FILE=${LOCAL_VERSION_INFO_DIR}/${FILE}.headers
  RELATIVE_HEADERS_FILE=$(realpath --relative-to ${LOCAL_ROOT_DIR} ${HEADERS_FILE})

  echo Downloading ${FILE}...
  ${CURL_CMD} ${URL} \
      --output ${LOCAL_DOWNLOAD_DIR}/${FILE} \
      --dump-header ${HEADERS_FILE}

  SHA=$(sha1sum ${LOCAL_DOWNLOAD_DIR}/${FILE} | awk '{ print $1}')

  # Add a METADATA file URL entry for every file we download.
  cat << EOF >> ${METADATA_FILE}
  url {
    type: OTHER
    value: "Downloaded from ${URL} on ${DOWNLOAD_DATE}, SHA1=${SHA}, see ${RELATIVE_HEADERS_FILE}"
  }
EOF

done

FILE_LAST_MODIFIED_HEADER=$(grep -i 'Last-Modified' ${LOCAL_VERSION_INFO_DIR}/${FILES[0]}.headers)
LAST_MODIFIED_DATE_TIME=$(echo ${FILE_LAST_MODIFIED_HEADER} | sed 's/Last-Modified: //')
PROTO_LAST_MODIFIED_DATE=$(date --date="${LAST_MODIFIED_DATE_TIME}" +'{ year: '%Y' month: '%-m' day: '%-d' }')

# Finish the METADATA file
cat << EOF >> ${METADATA_FILE}
  version: "As of ${DOWNLOAD_DATE}"
  last_upgrade_date ${PROTO_LAST_MODIFIED_DATE}
  license_type: NOTICE
}
EOF
