import copy
import json
import xml.etree.ElementTree as ET
from svg.path import parse_path

def extract_absolute_points_from_path(d):
    path = parse_path(d)
    coords = []

    for segment in path:
        start = segment.start
        coords.append({
            "x": round(float(start.real), 2),
            "y": round(float(start.imag), 2)
        })

    if len(path) > 0:
        end = path[-1].end
        coords.append({
            "x": round(float(end.real), 2),
            "y": round(float(end.imag), 2)
        })

    return coords


input_file = "floor-plan-coloring.svg"
output_svg = "output.svg"
output_json = "apartments.json"   # <-- NEW: JSON output for frontend

ET.register_namespace("", "http://www.w3.org/2000/svg")

tree = ET.parse(input_file)
root = tree.getroot()

ns = {"svg": "http://www.w3.org/2000/svg"}

apartments = []
count = 1

for clip in root.findall(".//svg:clipPath", ns):
    for elem in clip:
        tag = elem.tag.split("}")[-1]

        if tag == "path":
            d = elem.attrib.get("d")
            coords = extract_absolute_points_from_path(d)

            apartments.append({
                "unit": f"unit_{count}",
                "coordinates": coords,
                "svg_path": d
            })

            new_path = copy.deepcopy(elem)
            if "clip-path" in new_path.attrib:
                del new_path.attrib["clip-path"]

            new_path.set("fill", "yellow")
            new_path.set("stroke", "red")
            new_path.set("stroke-width", "2")
            new_path.set("opacity", "0.6")
            new_path.set("id", f"unit_{count}")
            new_path.set("pointer-events", "all")

            root.append(new_path)
            count += 1

tree.write(output_svg)

# Export apartments data to JSON for the frontend
with open(output_json, "w") as f:
    json.dump(apartments, f, indent=2)

print(f"Exported {len(apartments)} apartments to {output_json}")
print(f"SVG saved to {output_svg}")
