import 'package:comwell_key_app/domain/models/housekeeping.dart';
import 'package:comwell_key_app/services/api.dart';
import 'package:comwell_key_app/utils/locator.dart';
import 'package:comwell_key_app/utils/secure_storage.dart';

class HouseKeepingRepository {
  final secureStorage = locator<SecureStorage>();
  final api = Api();

  Future<void> saveHouseKeepingOrdered(Housekeeping housekeeping) async {
    await secureStorage.write(
        houseKeepingLastOrderedKey(housekeeping.roomNumber),
        DateTime.now().millisecondsSinceEpoch.toString());
    await api.orderHousekeeping(housekeeping);
  }

  Future<bool> isHousesKeepingOrdered(String roomNumber) async {
    final lastOrderedValue = await secureStorage
        .read(HouseKeepingRepository.houseKeepingLastOrderedKey(roomNumber));
    if (lastOrderedValue != null) {
      final lastOrdered =
          DateTime.fromMillisecondsSinceEpoch(int.parse(lastOrderedValue))
              .copyWith(hour: 0, minute: 0, second: 0);

      final isToday = DateTime.now().copyWith(hour: 0, minute: 0, second: 0);
      final isNextDay = DateTime.now().isAfter(isToday) &&
          DateTime.now().isAfter(lastOrdered);
      final timeOfToday = DateTime.now().hour;
      final isHouseKeepingAllowed = isNextDay &&
          timeOfToday > 2; // If it's after 3am on the day after the order

      return isHouseKeepingAllowed;
    }
    return false;
  }

  static String houseKeepingLastOrderedKey(String roomNumber) =>
      'housekeeping_last_ordered_$roomNumber';
}