import 'package:concierge/data/remote/converters/flag_converter.dart';
import 'package:concierge/data/remote/models/media_image.dart';
import 'package:json_annotation/json_annotation.dart';
part '../../../_generated/data/remote/models/product.g.dart';
@JsonSerializable(fieldRename: FieldRename.snake)
class Product {
final int id;
final String title;
final String subTitle;
final String body;
final String allergies;
final double price;
final double? priceComwellClub;
final String estimatedDeliveryTime;
@FlagConverter()
final bool isNew;
final List<MediaImage> images;
final List<Option> options;
final String type;
Product({
required this.id,
required this.title,
required this.subTitle,
required this.body,
required this.allergies,
required this.price,
required this.priceComwellClub,
required this.estimatedDeliveryTime,
required this.isNew,
required this.images,
required this.options,
required this.type,
});
factory Product.fromJson(Map<String, dynamic> json) => _$ProductFromJson(json);
Map<String, dynamic> toJson() => _$ProductToJson(this);
}
@JsonSerializable(fieldRename: FieldRename.snake)
class Option {
final int id;
final String name;
final int productId;
final List<Answer> answers;
const Option({
required this.id,
required this.name,
required this.productId,
required this.answers,
});
factory Option.fromJson(Map<String, dynamic> json) => _$OptionFromJson(json);
Map<String, dynamic> toJson() => _$OptionToJson(this);
}
@JsonSerializable(fieldRename: FieldRename.snake)
class Answer {
final int id;
final String name;
final int isDefault;
final int productOptionId;
final bool isSelected;
const Answer({
required this.id,
required this.name,
required this.isDefault,
required this.productOptionId,
required this.isSelected,
});
factory Answer.fromJson(Map<String, dynamic> json) => _$AnswerFromJson(json);
Map<String, dynamic> toJson() => _$AnswerToJson(this);
}