import 'package:comwell_key_app/base/base_cubit.dart';
import 'package:comwell_key_app/overview/models/guest.dart';
import 'package:comwell_key_app/share/share_booking_repository.dart';
import 'package:comwell_key_app/utils/l10n_utils.dart';
import 'package:equatable/equatable.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:share_plus/share_plus.dart';
part 'share_booking_state.dart';
class ShareBookingCubit extends BaseCubit<ShareBookingState> {
final ShareBookingRepository _shareBookingRepository;
final Booking booking;
ShareBookingCubit(this._shareBookingRepository, {required this.booking})
: super(const ShareBookingState.initial());
void updateSelectedGuests(Iterable<Guest> guests) {
safeEmit(state.updateSelectedGuests(guests));
}
void removeGuests(List<int> guestIds) {
final newSelectedGuests = state.selectedGuests.toList();
newSelectedGuests.removeWhere((guest) => guestIds.contains(guest.id));
safeEmit(state.updateSelectedGuests(newSelectedGuests));
}
Future<void> createRoomSharingLink(BuildContext context, Booking booking) async {
safeEmit(state.loading());
final link = await _shareBookingRepository.createRoomSharingLink(
booking.confirmationNumber,
booking.hotelCode,
0,
);
if (link != null && link.isNotEmpty) {
Share.share(
context.strings.share_booking_message(
"${booking.firstName} ${booking.lastName}",
booking.hotelName,
link,
),
subject: context.strings.comwell_booking,
);
safeEmit(state.loaded());
} else {
safeEmit(state.setupError(StateError('share_link_creation_failed')));
}
}
Future<void> shareBooking(BuildContext context, Booking booking) async {
// TODO: Implement actual sharing logic here
Share.share(
'${booking.hotelName}\n\n'
'${context.strings.dates}: ${DateFormat('d. MMM').format(booking.startDate)} - ${DateFormat('d. MMM').format(booking.endDate)}\n'
'${context.strings.guests}: ${booking.adults} ${booking.adults > 1 ? context.strings.adults : context.strings.adult}${booking.children > 0 ? ' | ${booking.children} ${booking.children > 1 ? context.strings.children : context.strings.child}' : ''}\n\n'
'${context.strings.view_booking}: https://comwell.app/booking/${booking.id}',
subject: context.strings.comwell_booking,
);
}
void clearSelection() {
safeEmit(const ShareBookingState.initial());
}
}