enum MeteringScreenLayoutFeature {
  extremeExposurePairs, // 0
  filmPicker, // 1
  equipmentProfiles, // 3
}

typedef MeteringScreenLayoutConfig = Map<MeteringScreenLayoutFeature, bool>;

extension MeteringScreenLayoutConfigJson on MeteringScreenLayoutConfig {
  static MeteringScreenLayoutConfig fromJson(Map<String, dynamic> data) {
    int migratedIndex(MeteringScreenLayoutFeature feature) {
      switch (feature) {
        case MeteringScreenLayoutFeature.extremeExposurePairs:
          return 0;
        case MeteringScreenLayoutFeature.filmPicker:
          return 1;
        case MeteringScreenLayoutFeature.equipmentProfiles:
          return 3;
      }
    }

    return <MeteringScreenLayoutFeature, bool>{
      for (final f in MeteringScreenLayoutFeature.values)
        f: (data[migratedIndex(f).toString()] ?? data[f.name]) as bool? ?? true,
    };
  }

  Map<String, dynamic> toJson() => map((key, value) => MapEntry(key.name, value));
}