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