<?php

$clientip = $_SERVER["REMOTE_ADDR"];

// Don't do this if the IP matters for security, unless you verify REMOTE_ADDR
// is an address inside Cloudflare's CDN.  It's fine here though, since we're
// just turning it into a lat/lon using publicly-available data.
if (!empty($_SERVER["HTTP_CF_CONNECTING_IP"])) {
    $clientip = $_SERVER["HTTP_CF_CONNECTING_IP"];
}

if (!empty($VARS["ip"])) {
    $clientip = $VARS["ip"];
}

use GeoIp2\Database\Reader;
use GeoIp2\Exception\AddressNotFoundException;

try {
    $reader = new Reader(env("geoip_database"));
    $record = $reader->city($clientip);

    exitWithJson([
        "status" => "OK",
        "location" => [
            "latitude" => $record->location->latitude,
            "longitude" => $record->location->longitude
        ],
        "clientip" => $clientip,
        "postcode" => $record->postal->code,
        "attribution" => "This product includes GeoLite2 data created by MaxMind, available from <a href=\"https://www.maxmind.com\">https://www.maxmind.com</a>."
    ]);
} catch (GeoIp2\Exception\AddressNotFoundException $ex) {
    exitWithJson([
        "status" => "ERROR",
        "message" => "Location not found for IP address.",
        "clientip" => $clientip
    ]);
}
