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());
  }
}