chromium/ios/chrome/browser/parcel_tracking/parcel_tracking_util.h

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_CHROME_BROWSER_PARCEL_TRACKING_PARCEL_TRACKING_UTIL_H_
#define IOS_CHROME_BROWSER_PARCEL_TRACKING_PARCEL_TRACKING_UTIL_H_

#import "base/feature_list.h"
#import "components/commerce/core/proto/parcel.pb.h"
#import "components/prefs/pref_service.h"
#import "ios/chrome/browser/parcel_tracking/tracking_source.h"
#import "ios/web/public/annotations/custom_text_checking_result.h"

namespace commerce {
class ShoppingService;
}  // namespace commerce

@protocol ParcelTrackingOptInCommands;

// Returns true if the user is eligible for the parcel tracking opt-in prompt.
// The user must have never before seen the prompt and must be signed in.
bool IsUserEligibleParcelTrackingOptInPrompt(
    PrefService* pref_service,
    commerce::ShoppingService* shopping_service);

// Takes NSArray<CustomTextCheckingResult*>* `result` and returns a
// corresponding vector of parcel carrier and tracking number pairs.
std::vector<std::pair<commerce::ParcelIdentifier::Carrier, std::string>>
ConvertCustomTextCheckingResult(NSArray<CustomTextCheckingResult*>* result);

// Tracks the list of parcels. If successful and `display_infobar` is true,
// triggers an infobar display to confirm that the package has been tracked.
void TrackParcels(
    commerce::ShoppingService* shopping_service,
    NSArray<CustomTextCheckingResult*>* parcels,
    std::string domain,
    id<ParcelTrackingOptInCommands> parcel_tracking_commands_handler,
    bool display_infobar,
    TrackingSource source);

// Displays the parcel tracking opt-in UI for the new parcels from parcel list
// `parcels`. "New parcels" are parcels that are not already being tracked.
void FilterParcelsAndShowParcelTrackingUI(
    commerce::ShoppingService* shopping_service,
    NSArray<CustomTextCheckingResult*>* parcels,
    id<ParcelTrackingOptInCommands> parcel_tracking_commands_handler);

#endif  // IOS_CHROME_BROWSER_PARCEL_TRACKING_PARCEL_TRACKING_UTIL_H_