import 'package:comwell_key_app/base/base_cubit.dart';
import 'package:comwell_key_app/find_booking/cubit/find_booking_state.dart';
import 'package:comwell_key_app/find_booking/find_booking_repository.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:comwell_key_app/utils/locator.dart';
import 'package:flutter/material.dart';
class FindBookingCubit extends BaseCubit<FindBookingState> {
final FindBookingRepository findBookingRepository =
locator<FindBookingRepository>();
final TextEditingController confirmationIdController =
TextEditingController();
final TextEditingController lastNameController = TextEditingController();
FindBookingCubit() : super(FindBookingState()) {
confirmationIdController.addListener(() {
safeEmit(state.copyWith(isButtonEnabled: canContinue));
});
lastNameController.addListener(() {
safeEmit(state.copyWith(isButtonEnabled: canContinue));
});
}
Future<Booking?> findBooking(String confirmationId, String lastName) async {
try {
safeEmit(FindBookingState(isLoading: true));
final booking = await findBookingRepository.findBookingByConfirmationId(
confirmationId, lastName);
return booking;
} catch (e, st) {
logError(e, st);
safeEmit(FindBookingState(error: e.toString()));
return null;
}
}
bool get isConfirmationIdValid {
// Format: 9 digits + dash + 1 digit = 11 characters total
final text = confirmationIdController.text;
if (text.length != 10) return false;
// Check format: 9 digits, dash, 1 digit
final regex = RegExp(r'^\d{8}-\d$');
return regex.hasMatch(text);
}
bool get canContinue {
return isConfirmationIdValid && lastNameController.text.isNotEmpty;
}
}