"use client";
import dynamic from "next/dynamic";
import ChatPanel from "@/components/ChatPanel";
import { useState } from "react";
import type { MapLayer } from "@/components/MapViewer";
// Dynamic import for MapViewer (client-side only)
const MapViewer = dynamic(() => import("@/components/MapViewer"), {
ssr: false,
loading: () =>
Loading Map...
});
export default function Home() {
const [layers, setLayers] = useState([]);
const handleMapUpdate = (newGeojson: any) => {
// Unique ID generation
const id = Date.now().toString() + Math.random().toString(36).substr(2, 9);
// Extract metadata from backend response
const name = newGeojson.properties?.layer_name || `Layer ${layers.length + 1}`;
const recommendedStyle = newGeojson.properties?.style || {};
const choroplethConfig = newGeojson.properties?.choropleth || null;
// Construct new layer with defaults if style is missing
const newLayer: MapLayer = {
id,
name,
data: newGeojson,
visible: true,
style: {
color: recommendedStyle.color || "#6366f1",
fillColor: recommendedStyle.fillColor || recommendedStyle.color || "#6366f1",
fillOpacity: recommendedStyle.fillOpacity || 0.3,
weight: recommendedStyle.weight || 1
},
// Pass choropleth config if present
...(choroplethConfig && { choropleth: choroplethConfig }),
// Point marker config
pointMarker: newGeojson.properties?.pointMarker
};
// Add to layers (newest on top)
setLayers(prev => [...prev, newLayer]);
};
const handleLayerUpdate = (id: string, updates: Partial) => {
setLayers(prev => prev.map(layer =>
layer.id === id ? { ...layer, ...updates } : layer
));
};
const handleLayerRemove = (id: string) => {
setLayers(prev => prev.filter(layer => layer.id !== id));
};
const handleLayerReorder = (fromIndex: number, toIndex: number) => {
setLayers(prev => {
const newLayers = [...prev];
const [movedLayer] = newLayers.splice(fromIndex, 1);
newLayers.splice(toIndex, 0, movedLayer);
return newLayers;
});
};
return (
{/* Left Panel: Chat (30-40% width) */}
{/* Right Panel: Map (Remaining width) */}
);
}