import requests
import os
import math

# Directory per salvare le immagini
save_directory = "streetview_images"
if not os.path.exists(save_directory):
    os.makedirs(save_directory)

# Funzione per calcolare le coordinate intermedie
def get_intermediate_points(start_lat, start_lng, end_lat, end_lng, distance):
    earth_radius = 6371000  # Raggio della Terra in metri
    points = []

    # Converti le coordinate in radianti
    lat1 = math.radians(start_lat)
    lng1 = math.radians(start_lng)
    lat2 = math.radians(end_lat)
    lng2 = math.radians(end_lng)

    # Calcola la distanza totale tra i due punti
    delta_lat = lat2 - lat1
    delta_lng = lng2 - lng1
    a = math.sin(delta_lat / 2) ** 2 + math.cos(lat1) * math.cos(lat2) * math.sin(delta_lng / 2) ** 2
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
    total_distance = earth_radius * c

    # Calcola i punti intermedi
    num_points = int(total_distance / distance)
    for i in range(num_points + 1):
        fraction = i / num_points
        A = math.sin((1 - fraction) * c) / math.sin(c)
        B = math.sin(fraction * c) / math.sin(c)
        x = A * math.cos(lat1) * math.cos(lng1) + B * math.cos(lat2) * math.cos(lng2)
        y = A * math.cos(lat1) * math.sin(lng1) + B * math.cos(lat2) * math.sin(lng2)
        z = A * math.sin(lat1) + B * math.sin(lat2)
        lat = math.atan2(z, math.sqrt(x**2 + y**2))
        lng = math.atan2(y, x)
        points.append((math.degrees(lat), math.degrees(lng)))

    return points

# Funzione per scaricare un'immagine panoramica
def download_pano_image(lat, lng, index):
    # URL di esempio per un'immagine panoramica (potrebbe non funzionare senza un panoid valido)
    url = f"https://streetviewpixels-pa.googleapis.com/v1/tile?cb_client=maps_sv.tactile&panoid=FAKE_PANOID&x=0&y=0&zoom=0&nbt=1&fover=2"

    # Simula una richiesta HTTP con headers per sembrare un browser
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
        "Referer": "https://www.google.com/",
    }

    # Scarica l'immagine
    response = requests.get(url, headers=headers)

    # Salva l'immagine se la richiesta ha successo
    if response.status_code == 200:
        filename = os.path.join(save_directory, f"pano_{index}.jpg")
        with open(filename, "wb") as file:
            file.write(response.content)
        print(f"Immagine scaricata e salvata come {filename}")
    else:
        print(f"Errore durante il download per {lat}, {lng}: {response.status_code}")

# Coordinate di partenza e destinazione (esempio: Milano, Duomo a Castello Sforzesco)
start_lat, start_lng = 45.4642, 9.1900
end_lat, end_lng = 45.4766, 9.1793

# Distanza tra i punti (in metri)
distance = 30

# Ottieni i punti intermedi
points = get_intermediate_points(start_lat, start_lng, end_lat, end_lng, distance)

# Scarica le immagini panoramiche per ogni punto
for index, (lat, lng) in enumerate(points):
    print(f"Scaricando immagine per {lat}, {lng}...")
    download_pano_image(lat, lng, index)

print("Download completato!")