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

#ifndef COMPONENTS_SEND_TAB_TO_SELF_IOS_SEND_TAB_TO_SELF_MODEL_BRIDGE_OBSERVER_H_
#define COMPONENTS_SEND_TAB_TO_SELF_IOS_SEND_TAB_TO_SELF_MODEL_BRIDGE_OBSERVER_H_

#import <Foundation/Foundation.h>

#include "base/macros.h"
#include "components/send_tab_to_self/send_tab_to_self_model.h"
#include "components/send_tab_to_self/send_tab_to_self_model_observer.h"

// Protocol forwarding all Send Tab To Self Model Observer methods in
// Objective-C.
@protocol SendTabToSelfModelBridgeObserver <NSObject>

@required
- (void)sendTabToSelfModelLoaded:(send_tab_to_self::SendTabToSelfModel*)model;

- (void)sendTabToSelfModel:(send_tab_to_self::SendTabToSelfModel*)model
     didAddEntriesRemotely:
         (const std::vector<const send_tab_to_self::SendTabToSelfEntry*>&)
             new_entries;

// The Entry has already been deleted at this point and the guid cannot be used
// to access the old entry via SendTabToSelfModel::GetEntryByGUID.
- (void)sendTabToSelfModel:(send_tab_to_self::SendTabToSelfModel*)model
    didRemoveEntriesRemotely:(const std::vector<std::string>&)guids;
@end

namespace send_tab_to_self {

// Observer for the Send Tab To Self model that translates all the callbacks to
// Objective-C calls.
class SendTabToSelfModelBridge : public SendTabToSelfModelObserver {
 public:
  // It is required that |model| should be non-null. If |observer| is nil this
  // class will result in all no-ops.

  explicit SendTabToSelfModelBridge(
      id<SendTabToSelfModelBridgeObserver> observer,
      SendTabToSelfModel* model);
  ~SendTabToSelfModelBridge() override;

 private:
  void SendTabToSelfModelLoaded() override;
  void EntriesAddedRemotely(
      const std::vector<const SendTabToSelfEntry*>&) override;
  void EntriesRemovedRemotely(const std::vector<std::string>&) override;

  __weak id<SendTabToSelfModelBridgeObserver> observer_;

  SendTabToSelfModel* model_;  // weak

  DISALLOW_COPY_AND_ASSIGN(SendTabToSelfModelBridge);
};

}  // namespace send_tab_to_self
#endif  // COMPONENTS_SEND_TAB_TO_SELF_IOS_SEND_TAB_TO_SELF_MODEL_BRIDGE_OBSERVER_H_
