import 'package:flutter/material.dart'; import 'package:latlong2/latlong.dart'; enum PlaceTrait { calm, dynamic, intimate, open, solo, group, reset, impress, transit, clean, expressive, } extension PlaceTraitText on PlaceTrait { String get label { return switch (this) { PlaceTrait.calm => 'спокойное', PlaceTrait.dynamic => 'живое', PlaceTrait.intimate => 'камерное', PlaceTrait.open => 'открытое', PlaceTrait.solo => 'для себя', PlaceTrait.group => 'для компании', PlaceTrait.reset => 'выдохнуть', PlaceTrait.impress => 'впечатлить', PlaceTrait.transit => 'транзитное', PlaceTrait.clean => 'чистое', PlaceTrait.expressive => 'выразительное', }; } IconData get icon { return switch (this) { PlaceTrait.calm => Icons.air_outlined, PlaceTrait.dynamic => Icons.bolt_outlined, PlaceTrait.intimate => Icons.lock_outline, PlaceTrait.open => Icons.public_outlined, PlaceTrait.solo => Icons.person_outline, PlaceTrait.group => Icons.forum_outlined, PlaceTrait.reset => Icons.spa_outlined, PlaceTrait.impress => Icons.diamond_outlined, PlaceTrait.transit => Icons.near_me_outlined, PlaceTrait.clean => Icons.wb_sunny_outlined, PlaceTrait.expressive => Icons.auto_awesome_outlined, }; } } class PlaceRecommendation { const PlaceRecommendation({ required this.id, required this.name, required this.area, required this.photoUrls, required this.coordinate, required this.traits, }); final String id; final String name; final String area; final List photoUrls; final LatLng coordinate; final Set traits; String get coverPhotoUrl => photoUrls.first; } class VoiceReviewDraft { const VoiceReviewDraft({ required this.placeName, required this.duration, required this.extractedTraits, required this.evidence, }); final String placeName; final Duration duration; final Set extractedTraits; final List evidence; bool get isLongEnough => duration.inSeconds >= 30; VoiceReviewDraft copyWith({ String? placeName, Duration? duration, Set? extractedTraits, List? evidence, }) { return VoiceReviewDraft( placeName: placeName ?? this.placeName, duration: duration ?? this.duration, extractedTraits: extractedTraits ?? this.extractedTraits, evidence: evidence ?? this.evidence, ); } }