#!/bin/sh
set -eu
. /usr/libexec/edgeshield/geoip-common.sh

json=0
[ "${1:-}" = "--json" ] && json=1
country_ok=0; city_ok=0; asn_ok=0
geoip_validate_country >/dev/null 2>&1 && country_ok=1 || true
geoip_validate_city >/dev/null 2>&1 && city_ok=1 || true
geoip_validate_asn >/dev/null 2>&1 && asn_ok=1 || true
available=0
[ "$country_ok" = 1 ] && [ "$city_ok" = 1 ] && [ "$asn_ok" = 1 ] && available=1
active=0
[ -f "$EDGESHIELD_GEOIP_ACTIVE_CONF" ] && active=1

if [ "$json" = 1 ]; then
cat <<EOF
{
  "schema": "niceos.edgeshield.geoip.status.v1",
  "provider": "maxmind",
  "available": $(geoip_json_bool "$available"),
  "active": $(geoip_json_bool "$active"),
  "databaseDirectory": "$EDGESHIELD_GEOIP_DB_DIR",
  "activeNginxConfig": "$EDGESHIELD_GEOIP_ACTIVE_CONF",
  "databases": {
    "country": {"editionId": "GeoLite2-Country", "path": "$(geoip_db_path GeoLite2-Country)", "valid": $(geoip_json_bool "$country_ok")},
    "city": {"editionId": "GeoLite2-City", "path": "$(geoip_db_path GeoLite2-City)", "valid": $(geoip_json_bool "$city_ok")},
    "asn": {"editionId": "GeoLite2-ASN", "path": "$(geoip_db_path GeoLite2-ASN)", "valid": $(geoip_json_bool "$asn_ok")}
  },
  "fallback": {"countryIsoCode":"ZZ","countryName":"Unknown","cityName":"Unknown","asn":0,"organization":"Unknown","source":"fallback_no_database"}
}
EOF
else
    printf 'provider=maxmind\n'
    printf 'available=%s\n' "$(geoip_json_bool "$available")"
    printf 'active=%s\n' "$(geoip_json_bool "$active")"
    printf 'country=%s valid=%s\n' "$(geoip_db_path GeoLite2-Country)" "$country_ok"
    printf 'city=%s valid=%s\n' "$(geoip_db_path GeoLite2-City)" "$city_ok"
    printf 'asn=%s valid=%s\n' "$(geoip_db_path GeoLite2-ASN)" "$asn_ok"
fi

[ "$available" = 1 ]
