#!/usr/bin/env python3
"""
make_kmz_from_image_geotiff.py

Converts IMAGE_PNG -> JPG (removes alpha), creates KML ground overlay using GeoTIFF bounds if present,
and packages KML + image into KMZ (zip) that Google Earth accepts.

Edit IMAGE_PNG and GEOTIFF paths if needed.
"""
import os, sys, zipfile
from PIL import Image
import rasterio
import simplekml

IMAGE_PNG = "annotated_map.png"
IMAGE_JPG = "annotated_map.jpg"
GEOTIFF = "mouza_auto_georef.tif"   # optional: if present, use it to compute bounds
OUT_KML = "mouza_overlay.kml"
OUT_KMZ = "mouza_auto_overlay.kmz"

def convert_png_to_jpg(png_path, jpg_path):
    im = Image.open(png_path)
    if im.mode in ("RGBA", "LA"):
        bg = Image.new("RGB", im.size, (255,255,255))
        bg.paste(im, mask=im.split()[-1])
        im = bg
    else:
        im = im.convert("RGB")
    im.save(jpg_path, "JPEG", quality=90)
    print("Saved:", jpg_path)

def bounds_from_geotiff(tif_path):
    with rasterio.open(tif_path) as ds:
        b = ds.bounds  # left, bottom, right, top
        return b.left, b.top, b.right, b.bottom

def create_kml(jpg_path, kml_path, north, south, east, west):
    kml = simplekml.Kml()
    go = kml.newgroundoverlay(name="Mouza overlay")
    go.icon.href = os.path.basename(jpg_path)
    go.latlonbox.north = float(north)
    go.latlonbox.south = float(south)
    go.latlonbox.east = float(east)
    go.latlonbox.west = float(west)
    kml.save(kml_path)
    print("Saved:", kml_path)

def make_kmz(kml_path, jpg_path, kmz_path):
    with zipfile.ZipFile(kmz_path, 'w', compression=zipfile.ZIP_DEFLATED) as z:
        z.write(kml_path, arcname=os.path.basename(kml_path))
        z.write(jpg_path, arcname=os.path.basename(jpg_path))
    print("Saved KMZ:", kmz_path)

if __name__ == "__main__":
    if not os.path.exists(IMAGE_PNG):
        print("Missing image:", IMAGE_PNG); sys.exit(1)
    convert_png_to_jpg(IMAGE_PNG, IMAGE_JPG)
    if os.path.exists(GEOTIFF):
        left, top, right, bottom = bounds_from_geotiff(GEOTIFF)
        west = left; east = right; south = bottom; north = top
        print("Using geotiff bounds:", north, south, east, west)
    else:
        print("No geotiff found (", GEOTIFF, "). Please enter bounds: north south east west")
        vals = input("north south east west > ").strip().split()
        if len(vals) != 4:
            print("Invalid input. Exiting."); sys.exit(1)
        north, south, east, west = map(float, vals)
    create_kml(IMAGE_JPG, OUT_KML, north, south, east, west)
    make_kmz(OUT_KML, IMAGE_JPG, OUT_KMZ)
    print("KMZ ready:", OUT_KMZ)
