#!/usr/bin/env python3
"""
import os
import sys
from shapely.geometry import box, Point, Polygon
import geopandas as gpd
import matplotlib.pyplot as plt
import contextily as ctx
from geopy.geocoders import Nominatim
import time

# --- Settings ---
OUTFILE = "jerv_kartskisse.png"
WIDTH = 1200  # px
HEIGHT = 900
DPI = 150

# Stedsnavn som skal lokaliseres (Nominatim): vi bruker Lesja + Lordalen og Dalsida som søk
GEOCODER_USER_AGENT = "jerv_map_generator"
SEARCH_NAMES = ["Lordalen, Lesja, Norway", "Dalsida, Lesja, Norway", "Lesja, Norway"]

# Buffer (grader) rundt funnet punkt for kartutsnitt (tilpasses automatisk)
BUFFER_DEG = 0.08  # ~8 km (omtrentlig) - juster ved behov

# Farger for soner
COLOR_HIGH = "#e31a1c"   # rød
COLOR_MODERATE = "#ffcc00"  # gul
COLOR_CORRIDOR = "#2ca25f"  # grønn

# --- Funksjoner ---
def geocode_first(names):
    geolocator = Nominatim(user_agent=GEOCODER_USER_AGENT, timeout=10)
    for name in names:
        try:
            loc = geolocator.geocode(name, exactly_one=True)
            if loc:
                print(f"Found: {name} -> {loc.latitude:.5f}, {loc.longitude:.5f}")
                return loc.latitude, loc.longitude
        except Exception as e:
            print("Geocode error:", e)
            time.sleep(1)
    raise RuntimeError("Klarte ikke geokode noen av stedsnavnene. Sjekk internett eller juster navn.")

def make_bbox(lat, lon, buffer_deg):
    minx = lon - buffer_deg
    maxx = lon + buffer_deg
    miny = lat - buffer_deg
    maxy = lat + buffer_deg
    return box(minx, miny, maxx, maxy)

def main():
    print("Starter kartgenerering...")
    # 1) Finn senter i området via geokoding
    lat, lon = geocode_first(SEARCH_NAMES)

    # 2) Lag bbox og GeoDataFrame
    bbox_geom = make_bbox(lat, lon, BUFFER_DEG)
    gdf_bbox = gpd.GeoDataFrame({"geometry": [bbox_geom]}, crs="EPSG:4326")

    # 3) Lag hensynssoner (skjematiske polygonelementer)
    # Rød sone: sentrale Lordalen/Reinheimen (større rundbuffer mot NØ/SV for å indikere sårbar kjerne)
    red_poly = bbox_geom.buffer(0.035)  # omtrent
    # Gul sone: Dalsida-modul (noe mindre, litt forskjøvet vestover)
    yellow_poly = box(lon - 0.06, lat - 0.04, lon + 0.02, lat + 0.04)
    # Grønn korridor: tynn stripe langs nederste/nordlige kant av bbox
    green_poly = box(lon - 0.12, lat + 0.025, lon + 0.12, lat + 0.045)

    gdf_zoner = gpd.GeoDataFrame({
        "navn": ["Høyhensyn (villrein)", "Moderat hensyn (jerv/sporing)", "Fly-korridor / lavt hensyn"],
        "geometry": [red_poly, yellow_poly, green_poly],
        "farge": [COLOR_HIGH, COLOR_MODERATE, COLOR_CORRIDOR]
    }, crs="EPSG:4326")

    # 4) Snu til WebMercator for bakgrunnskart
    gdf_bbox_wm = gdf_bbox.to_crs(epsg=3857)
    gdf_zoner_wm = gdf_zoner.to_crs(epsg=3857)

    # 5) Tegn kart
    fig, ax = plt.subplots(1, 1, figsize=(WIDTH/DPI, HEIGHT/DPI), dpi=DPI)
    # Hent ut utstrekning fra bbox (i meters etter projeksjon)
    minx, miny, maxx, maxy = gdf_bbox_wm.total_bounds
    pad_x = (maxx - minx) * 0.08
    pad_y = (maxy - miny) * 0.08
    ax.set_xlim(minx - pad_x, maxx + pad_x)
    ax.set_ylim(miny - pad_y, maxy + pad_y)

    # Tegn soner (med gjennomsiktighet)
    for _, row in gdf_zoner_wm.iterrows():
        ax.add_geometries([row.geometry], crs=None, fc=row.farge, ec="k", alpha=0.35, linewidth=0.6)

    # Legg på grenser og tittel
    # Sett tittel og kilder
    ax.set_title("Kartskisse: Lordalen og Dalsida statsallmenning – foreslåtte hensynssoner", fontsize=12, pad=12)
    # Legende - lager manuell patch-legend
    import matplotlib.patches as mpatches
    red_patch = mpatches.Patch(color=COLOR_HIGH, label="Høyhensyn: Villrein (unngå fly/skogning)", alpha=0.5)
    yellow_patch = mpatches.Patch(color=COLOR_MODERATE, label="Moderat hensyn: Sporings-/fangstområder", alpha=0.5)
    green_patch = mpatches.Patch(color=COLOR_CORRIDOR, label="Fly-korridor / lavere hensyn", alpha=0.5)
    ax.legend(handles=[red_patch, yellow_patch, green_patch], loc="lower left", fontsize=9)

    # Legg på bakgrunnskart fra contextily
    try:
        ctx.add_basemap(ax, source=ctx.providers.Stamen.TerrainBackground, crs='EPSG:3857')
    except Exception as e:
        print("Warning: kunne ikke hente bakgrunnskart fra contextily:", e)
        print("Kartet vil likevel bli laget uten online-bakgrunn.")

    # Tekstboks med kilde og referanser (saksdokument + e-post)
    props = dict(boxstyle='round', facecolor='white', alpha=0.8)
    citation_text = ("Kilde: NINA søknad (20.11.2025) og e-postkorrespondanse (nov 2025)."
                     "\nSe saksframlegg for detaljer.")
    ax.text(0.99, 0.01, citation_text, ha='right', va='bottom', transform=ax.transAxes, fontsize=8, bbox=props)

    ax.axis("off")
    plt.tight_layout()

    # Lagre til PNG
    print("Lagrer kart til", OUTFILE)
    plt.savefig(OUTFILE, dpi=DPI)
    plt.close()
    print("Ferdig. Fil:", OUTFILE)

if __name__ == "__main__":
    main()