import 'position.dart'; class Room { const Room({required this.id, required this.name, required this.polygon}); final String id; final String name; /// Polygon vertices in normalised 0..1 coordinates. final List polygon; Room copyWith({String? name, List? polygon}) => Room(id: id, name: name ?? this.name, polygon: polygon ?? this.polygon); Map toJson() => { 'id': id, 'name': name, 'polygon': polygon.map((p) => p.toJson()).toList(), }; factory Room.fromJson(Map json) => Room( id: json['id'] as String, name: json['name'] as String, polygon: (json['polygon'] as List) .map((p) => Position.fromJson(p as Map)) .toList(), ); } class FloorPlan { const FloorPlan({ required this.id, required this.floorId, required this.metersPerUnit, required this.rooms, }); final String id; final String floorId; /// Scale: how many real-world meters one normalised unit represents. final double metersPerUnit; final List rooms; FloorPlan copyWith({double? metersPerUnit, List? rooms}) => FloorPlan( id: id, floorId: floorId, metersPerUnit: metersPerUnit ?? this.metersPerUnit, rooms: rooms ?? this.rooms, ); Map toJson() => { 'id': id, 'floor_id': floorId, 'meters_per_unit': metersPerUnit, 'rooms': rooms.map((r) => r.toJson()).toList(), }; factory FloorPlan.fromJson(Map json) => FloorPlan( id: json['id'] as String, floorId: json['floor_id'] as String, metersPerUnit: (json['meters_per_unit'] as num).toDouble(), rooms: (json['rooms'] as List) .map((r) => Room.fromJson(r as Map)) .toList(), ); }