import json
from pathlib import Path

infile = Path("/var/www/html/cir/api/offline_packs/los_rios3d/tmp/los_rios_coastline.geojson")
outfile = Path("/var/www/html/cir/api/offline_packs/los_rios3d/ocean/los_rios_ocean_final.geojson")

data = json.loads(infile.read_text())

points = []
for f in data["features"]:
    geom = f.get("geometry", {})
    if geom.get("type") == "LineString":
        points.extend(geom["coordinates"])

if not points:
    raise SystemExit("No se encontraron puntos coastline")

# Orden norte-sur por latitud
points = sorted(points, key=lambda p: p[1], reverse=True)

min_lon = min(p[0] for p in points)
max_lon = max(p[0] for p in points)
min_lat = min(p[1] for p in points)
max_lat = max(p[1] for p in points)

# Margen hacia el océano Pacífico
ocean_west = min_lon - 1.2
north = max_lat + 0.15
south = min_lat - 0.15

ring = []
ring.append([ocean_west, north])
ring.append([points[0][0], points[0][1]])
ring.extend(points)
ring.append([points[-1][0], points[-1][1]])
ring.append([ocean_west, south])
ring.append([ocean_west, north])

geojson = {
    "type": "FeatureCollection",
    "features": [{
        "type": "Feature",
        "properties": {
            "name": "Oceano Pacifico Los Rios",
            "region": "los_rios",
            "source": "OSM natural=coastline",
            "method": "coastline_to_ocean_polygon_v1"
        },
        "geometry": {
            "type": "Polygon",
            "coordinates": [ring]
        }
    }]
}

outfile.write_text(json.dumps(geojson, ensure_ascii=False))
print(f"OK: {outfile}")
print(f"Features coastline: {len(data['features'])}")
print(f"Puntos: {len(points)}")
print(f"BBOX coastline: {min_lon},{min_lat} - {max_lon},{max_lat}")
