import 'package:comwell_key_app/utils/json.dart';
import 'package:json_annotation/json_annotation.dart';
part '../../.generated/services/models/booking_dto.g.dart';
@JsonSerializable()
class BookingDTO {
final String? roomNumber;
final String hotelCode;
final String firstName;
final String lastName;
final String bookerFirstName;
final String bookerLastName;
final List<GuestDTO> guests;
final String confirmationNumber;
final String dayIn;
final String dayOut;
final String? cancelTime;
final String status;
final bool? isCancelled;
final String? bookTime;
final String? roomType;
final int adults;
final int children;
final num? balance;
final bool isPrimaryGuest;
final String? maskedCardNumber;
final List<BookingAddonItem>? addOnItems;
BookingDTO({
required this.roomNumber,
required this.hotelCode,
required this.firstName,
required this.lastName,
this.bookerFirstName = '',
this.bookerLastName = '',
this.guests = const [],
required this.confirmationNumber,
required this.dayIn,
required this.dayOut,
required this.cancelTime,
required this.status,
this.isCancelled,
required this.bookTime,
required this.roomType,
required this.adults,
required this.children,
required this.balance,
required this.isPrimaryGuest,
this.addOnItems,
this.maskedCardNumber,
});
Json toJson() => _$BookingDTOToJson(this);
factory BookingDTO.fromJson(Json json) => _$BookingDTOFromJson(json);
}
@JsonSerializable()
class GuestDTO {
final int id;
final String firstName;
final String lastName;
GuestDTO({
required this.id,
required this.firstName,
required this.lastName,
});
Json toJson() => _$GuestDTOToJson(this);
factory GuestDTO.fromJson(Json json) => _$GuestDTOFromJson(json);
}
@JsonSerializable()
class BookingAddonItem {
final String code;
final String description;
final int quantity;
final int price;
BookingAddonItem(this.code, this.description, this.quantity, this.price);
@override
String toString() {
return 'AddOnItem{code: $code, description: $description, quantity: $quantity, price: $price}';
}
factory BookingAddonItem.fromJson(Map<String, dynamic> json) => _$BookingAddonItemFromJson(json);
Map<String, dynamic> toJson() => _$BookingAddonItemToJson(this);
BookingAddonItem copyWith({int? quantity, int? price}) {
return BookingAddonItem(code, description, quantity ?? this.quantity, price ?? this.price);
}
}