<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

use Stevebauman\Location\Facades\Location as GeoLocation;

class Location extends Model
{
    use HasFactory;

    public function saveLocation() 
    {
        $ip = request()->ip();

        $cache_key = 'ip-'.str_replace('.', '-', $ip);

        $geo = cache()->tags(['ips'])->rememberForever($cache_key, function() use($ip) {
            $geo = GeoLocation::get($ip !== '127.0.0.1' ?? null);
            return $geo;
        });

        $location = new Location;

        if ($geo) {
            $location->country = $geo->countryName;
            $location->region = $geo->regionName;
            $location->city = $geo->cityName;
        }

        $location->timezone = request('timezone');
        $location->save();

        return $location;
    }
}
