<?php

namespace App\Services;

use Exception;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Log;

class NominatimService
{
    /**
     * @throws Exception
     */
    public function get_way_id_from_nominatim($lat = null, $lng = null)
    {
        if (App::isProduction())
        {
            try {
                $url = "https://testmap.141.ir/nominatim/reverse?format=jsonv2&lat=".$lat."&lon=".$lng."&zoom=16&addressdetails=16";
                $arrContextOptions=array(
                    "ssl"=>array(
                        "verify_peer"=>false,
                        "verify_peer_name"=>false,
                    ),
                );

                $result = file_get_contents($url, false, stream_context_create($arrContextOptions));
                $result = json_decode($result);
                if (isset($result->osm_type)) {
                    if ($result->osm_type == 'way') {
                        return $result->osm_id;
                    }
                }
                return 0;
            }
            catch (Exception $e) {
                Log::channel('nominatim')->error($e->getMessage());
                throw $e;
            }
        }

        return 0;
    }

    /**
     * @throws Exception
     */
    function getIDFromNominatim($s_lng, $s_lat, $d_lng, $d_lat)
    {
        if (App::isProduction())
        {
            try {
                $url = "https://testmap.141.ir/route/v1/driving/" . $s_lng . "," . $s_lat . ";" . $d_lng . "," . $d_lat . "?overview=full&alternatives=true&steps=true";
                $arrContextOptions = array(
                    "ssl" => array(
                        "verify_peer" => false,
                        "verify_peer_name" => false,
                    ),
                );
                $result = file_get_contents($url, false, stream_context_create($arrContextOptions));
                $result = json_decode($result);
                if (count($result->routes) > 1 && $result->routes[1]->distance < $result->routes[0]->distance) {
                    // if(){
                    $ways = $result->routes[1]->legs[0]->steps;
                    // }
                } else
                    $ways = $result->routes[0]->legs[0]->steps;
                $ids = array();
                foreach ($ways as $key => $value) {
                    if (!in_array($value->name, $ids)) {
                        $ids[] = $value->name;
                    }
                }

                return $ids;
            }
            catch (Exception $e) {
                Log::channel('nominatim')->error($e->getMessage());
                throw $e;
            }
        }

        return [1, 2, 3];
    }
}
