import 'dart:core';
import 'package:latlong2/latlong.dart';

class Measurement {
  int measurementID;
  DateTime timeMeasured;
  Sensor sensor;
  String bodyOfWater;
  LatLng center;
  List <SubDiv> subDiv;
  List <LatLng> corners;

  Measurement({
    required this.measurementID,
    required this.timeMeasured,
    required this.sensor,
    required this.bodyOfWater,
    required this.center,
    required this.subDiv,
    required this.corners
  });

  factory Measurement.fromJson(Map<String, dynamic> json) {
    return Measurement(
      measurementID: json['MeasurementID'],
      timeMeasured: DateTime.parse(json['TimeMeasured']),
      sensor: Sensor.fromJson(json['Sensor']),
      bodyOfWater: json['BodyOfWater'] ?? 'nil',
      center: LatLng(json['CenterLat'], json['CenterLon']),
      subDiv: (json['Subdivisions'] as List<dynamic>).map((data) => SubDiv.fromJson(data)).toList(),
      corners: (json['Corners'] as List<dynamic>).map((corner) => LatLng(corner[0], corner[1])).toList(),
    );
  }
}

class SubDiv {
  int subDivID;
  int groupID;
  double minThickness;
  double avgThickness;
  LatLng center;
  double accuracy;

  SubDiv({
    required this.subDivID,
    required this.groupID,
    required this.minThickness,
    required this.avgThickness,
    required this.center,
    required this.accuracy,
  });

  factory SubDiv.fromJson(Map<String, dynamic> json) {
    return SubDiv(
      subDivID: json['SubdivID'],
      groupID: json['GroupID'],
      minThickness: json['MinThickness'],
      avgThickness: json['AvgThickness'],
      center: LatLng(json['CenLatitude'], json['CenLongitude']),
      accuracy: json['Accuracy'],
    );
  }
}

class Sensor {
  int sensorID;
  String sensorType;
  bool active;

  Sensor({
    required this.sensorID,
    required this.sensorType,
    required this.active,
  });

  factory Sensor.fromJson(Map<String, dynamic> json) {
    return Sensor(
      sensorID: json['SensorID'],
      sensorType: json['SensorType'] ?? 'nil',
      active: json['Active'],
    );
  }
}