import 'package:comwell_key_app/domain/repositories/housekeeping_repository.dart';
import 'package:comwell_key_app/presentation/base/base_cubit.dart';
import 'package:comwell_key_app/presentation/screens/house_keeping/cubit/housekeeping_state.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:comwell_key_app/tracking/comwell_tracking.dart';
import 'package:comwell_key_app/tracking/models/analytics_event_item.dart';
import 'package:comwell_key_app/utils/locator.dart';

import '../components/housekeeping_service.dart';

class HouseKeepingCubit extends BaseCubit<HouseKeepingState> {
  final houseKeepingRepository = HouseKeepingRepository();
  final tracking = locator<ComwellTracking>();
  HouseKeepingCubit() : super(HouseKeepingState.initial());

  final Iterable<HouseKeepingService> servicesSupplies = [
    HouseKeepingService.soap,
    HouseKeepingService.towels,
    HouseKeepingService.trash,
    HouseKeepingService.refill
  ];

  void onAddServiceClicked(String service) {
    final List<String> updatedServices = List.from(state.selectedServices)
      ..add(service);
    safeEmit(state.servicesSelected(selectedServices: updatedServices));
  }

  void onRemoveServiceClicked(String service) {
    final List<String> updatedServices = List.from(state.selectedServices)
      ..remove(service);
    safeEmit(state.servicesSelected(selectedServices: updatedServices));
  }

  void onServiceClicked(String name) {
    if (state.selectedServices.contains(name)) {
      onRemoveServiceClicked(name);
    } else {
      onAddServiceClicked(name);
    }
  }

  Future<List<String>> onOrderHousekeepingClicked(Booking booking) async {

    final analyticsEventItem = AnalyticsEventItem(
        hotelName: booking.hotelName,
        currency: "DKK",
        value: 0,
        placement: "housekeeping_page",
        items: state.selectedServices.map((e) => HouseKeepingService.values.firstWhere((element) => element.name == e).name).toList(),
        itemIds: state.selectedServices.map((e) => HouseKeepingService.values.firstWhere((element) => element.name == e).name).toList(),
        bookingReference: booking.confirmationNumber);
    tracking.trackAddToCart(analyticsEventItem);
    return state.selectedServices.toList();
  }
}