#!/bin/sh
# GNSS-SDR shell script that tries to download the latest Galileo Almanac file
# published by the European GNSS Service Centre.
#
# Usage: ./download-galileo-almanac.sh
#
# SPDX-FileCopyrightText: 2022 Carles Fernandez-Prades <cfernandez(at)cttc.es>
# SPDX-License-Identifier: GPL-3.0-or-later

if ! [ -x "$(command -v wget)" ]; then
    echo "Please install wget before using this script."
    exit 1
fi

help()
{
    echo "This script tries to download the most recent Galileo Almanac XML file"
    echo "published by the European GNSS Service Centre."
    echo "More info at https://www.gsc-europa.eu/product-almanacs"
    echo "If today there is no published file, the script will look up to one week ago."
    echo ""
    echo "Usage:"
    echo "./download-galileo-almanac.sh [OPTION]"
    echo "  Options:"
    echo "  -h, --help        Prints this message"
    echo "  -r, --rename      Gets latest Galileo Almanac XML file and saves it as gal_almanac.xml"
    echo "  -d, --date [date] Retrieves file for a specific date, with format YYYY-MM-DD"
    echo "  -rd [date]        Retrieves file for a specific date, with format YYYY-MM-DD"
    echo "                    and saves it as gal_almanac.xml"
    echo ""
    echo "  Examples:"
    echo "  ./download-galileo-almanac.sh                # Gets latest Galileo Almanac XML file"
    echo "  ./download-galileo-almanac.sh -r             # Gets latest Galileo Almanac XML file, stores it as gal_almanac.xml"
    echo "  ./download-galileo-almanac.sh -d 2022-03-15  # Gets Galileo Almanac XML file for that day"
    echo "  ./download-galileo-almanac.sh -rd 2022-03-15 # Gets Galileo Almanac XML file for that day, stores it as gal_almanac.xml"
}

if (([ "$1" = "-h" ]) || ([ "$1" = "--help" ])) ; then
    help
    exit 0
fi

RENAME=""
if (([ "$1" = "-r" ]) || ([ "$1" = "--rename" ])) ; then
    RENAME=" -O gal_almanac.xml "
fi

BASE_URL="https://www.gsc-europa.eu/sites/default/files/sites/all/files/"
YEAR=$(date '+%Y')
SPACING="-"
MONTH=$(date '+%m')
DAY=$(date '+%d')

TERMINATION1="_0.xml"
TERMINATION2=".xml"

COUNTER=1
MAX_COUNTER=7

if (([ "$1" = "-d" ]) || ([ "$1" = "--date" ])) ; then
    if wget "$BASE_URL$2$TERMINATION2" >/dev/null 2>&1 ; then
        echo "Downloaded latest Galileo almanac from $BASE_URL$2$TERMINATION2"
        exit 0
    else
        echo "Couldn't find an XML file for that date."
        exit 1
    fi
elif [ "$1" = "-rd" ] ; then
    if wget -O gal_almanac.xml "$BASE_URL$2$TERMINATION2" >/dev/null 2>&1 ; then
        echo "Downloaded latest Galileo almanac from $BASE_URL$2$TERMINATION2"
        exit 0
    else
        echo "Couldn't find an XML file for that date."
        rm gal_almanac.xml
        exit 1
    fi
else
    echo "According to system time, today is $(date '+%Y-%m-%d'). Searching for the latest Galileo almanac ..."
fi

lowercase()
{
    echo "$1" | sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/"
}

OS=`lowercase \`uname\``

date_before()
{
    if [ "$OS" = "darwin" ]; then
        YEAR=$(date -v -"$COUNTER"d '+%Y')
        MONTH=$(date -v -"$COUNTER"d '+%m')
        DAY=$(date -v -"$COUNTER"d '+%d')
    else
        YEAR=$(date -d "$COUNTER day ago" '+%Y')
        MONTH=$(date -d "$COUNTER day ago" '+%m')
        DAY=$(date -d "$COUNTER day ago" '+%d')
    fi
    COUNTER=$(($COUNTER+1))
}


try_download()
{
    while [ $COUNTER -le $MAX_COUNTER ]
    do
        url="$BASE_URL$YEAR$SPACING$MONTH$SPACING$DAY$TERMINATION2"
        if wget $RENAME $url >/dev/null 2>&1 ; then
        	echo "Downloaded latest Galileo almanac from $url"
            exit 0
        else
            date_before
            try_download
        fi
    done
}


url="$BASE_URL$YEAR$SPACING$MONTH$SPACING$DAY$TERMINATION1"
if wget $RENAME $url >/dev/null 2>&1 ; then
	echo "Downloaded latest Galileo almanac from $url"
else
    try_download
    echo "Couldn't find a recent Galileo almanac."
    exit 1
fi
