sequenceDiagram
    participant CartAvailabilityServiceImpl
    participant List<CartItemRequest>
    participant Pair<List<CartItemRequest>, List<CartItemRequest>>
    participant ArrayList<CartItemRequest>
    participant LocalDate
    
    CartAvailabilityServiceImpl->>List<CartItemRequest>: validateDeliveryDateOfItemRequest(cartItemRequests)
    List<CartItemRequest]-->>CartAvailabilityServiceImpl: cartItemRequests
    CartAvailabilityServiceImpl->>ArrayList<CartItemRequest>: deliveryDateValidItems = new ArrayList<>()
    CartAvailabilityServiceImpl->>ArrayList<CartItemRequest>: deliveryDateInvalidItems = new ArrayList<>()
    CartAvailabilityServiceImpl->>LocalDate: LocalDate.now()
    loop for each cartItemRequest
        CartAvailabilityServiceImpl->>CartItemRequest: cartItemRequest.getDeliveryDate()
        CartItemRequest-->>CartAvailabilityServiceImpl: deliveryDate
        CartAvailabilityServiceImpl->>LocalDate: deliveryDate.isAfter(LocalDate.now())
        LocalDate-->>CartAvailabilityServiceImpl: isAfter
        alt deliveryDate is after current date
            CartAvailabilityServiceImpl->>ArrayList<CartItemRequest>: deliveryDateValidItems.add(cartItemRequest)
        else
            CartAvailabilityServiceImpl->>ArrayList<CartItemRequest>: deliveryDateInvalidItems.add(cartItemRequest)
        end
    end
    CartAvailabilityServiceImpl->>Pair<List<CartItemRequest>, List<CartItemRequest>>: Pair.of(deliveryDateInvalidItems, deliveryDateValidItems)
    Pair<List<CartItemRequest>, List<CartItemRequest>>-->>CartAvailabilityServiceImpl: Pair<deliveryDateInvalidItems, deliveryDateValidItems>
