// Autogenerated from Pigeon (v27.1.0), do not edit directly.
// See also: https://pub.dev/packages/pigeon

#ifndef PIGEON_WINDOWS_WEBVIEW_API_G_H_
#define PIGEON_WINDOWS_WEBVIEW_API_G_H_
#include <flutter/basic_message_channel.h>
#include <flutter/binary_messenger.h>
#include <flutter/encodable_value.h>
#include <flutter/standard_message_codec.h>

#include <map>
#include <optional>
#include <ostream>
#include <string>

namespace coreframe_flutter_windows {

// Generated class from Pigeon.

class FlutterError {
public:
  explicit FlutterError(const std::string &code) : code_(code) {}
  explicit FlutterError(const std::string &code, const std::string &message)
      : code_(code), message_(message) {}
  explicit FlutterError(const std::string &code, const std::string &message,
                        const ::flutter::EncodableValue &details)
      : code_(code), message_(message), details_(details) {}

  const std::string &code() const { return code_; }
  const std::string &message() const { return message_; }
  const ::flutter::EncodableValue &details() const { return details_; }

private:
  std::string code_;
  std::string message_;
  ::flutter::EncodableValue details_;
};

template <class T> class ErrorOr {
public:
  ErrorOr(const T &rhs) : v_(rhs) {}
  ErrorOr(const T &&rhs) : v_(std::move(rhs)) {}
  ErrorOr(const FlutterError &rhs) : v_(rhs) {}
  ErrorOr(const FlutterError &&rhs) : v_(std::move(rhs)) {}

  bool has_error() const { return std::holds_alternative<FlutterError>(v_); }
  const T &value() const { return std::get<T>(v_); };
  const FlutterError &error() const { return std::get<FlutterError>(v_); };

private:
  friend class WindowsWebViewHostApi;
  ErrorOr() = default;
  T TakeValue() && { return std::get<T>(std::move(v_)); }

  std::variant<T, FlutterError> v_;
};

// Generated class from Pigeon that represents data sent in messages.
class WindowsEnvironmentOptions {
public:
  // Constructs an object setting all non-nullable fields.
  WindowsEnvironmentOptions();

  // Constructs an object setting all fields.
  explicit WindowsEnvironmentOptions(const std::string *user_data_path,
                                     const std::string *browser_exe_path,
                                     const std::string *additional_arguments);

  const std::string *user_data_path() const;
  void set_user_data_path(const std::string_view *value_arg);
  void set_user_data_path(std::string_view value_arg);

  const std::string *browser_exe_path() const;
  void set_browser_exe_path(const std::string_view *value_arg);
  void set_browser_exe_path(std::string_view value_arg);

  const std::string *additional_arguments() const;
  void set_additional_arguments(const std::string_view *value_arg);
  void set_additional_arguments(std::string_view value_arg);

  bool operator==(const WindowsEnvironmentOptions &other) const;
  bool operator!=(const WindowsEnvironmentOptions &other) const;
  /// Returns a hash code value for the object. This method is supported for the
  /// benefit of hash tables.
  size_t Hash() const;
  /// Stream output operator for formatted string representation.
  friend std::ostream &operator<<(std::ostream &os,
                                  const WindowsEnvironmentOptions &obj);

private:
  static WindowsEnvironmentOptions
  FromEncodableList(const ::flutter::EncodableList &list);
  ::flutter::EncodableList ToEncodableList() const;
  friend class WindowsWebViewHostApi;
  friend class PigeonInternalCodecSerializer;
  std::optional<std::string> user_data_path_;
  std::optional<std::string> browser_exe_path_;
  std::optional<std::string> additional_arguments_;
};

// Generated class from Pigeon that represents data sent in messages.
class WindowsCreateWebViewResult {
public:
  // Constructs an object setting all fields.
  explicit WindowsCreateWebViewResult(int64_t texture_id);

  int64_t texture_id() const;
  void set_texture_id(int64_t value_arg);

  bool operator==(const WindowsCreateWebViewResult &other) const;
  bool operator!=(const WindowsCreateWebViewResult &other) const;
  /// Returns a hash code value for the object. This method is supported for the
  /// benefit of hash tables.
  size_t Hash() const;
  /// Stream output operator for formatted string representation.
  friend std::ostream &operator<<(std::ostream &os,
                                  const WindowsCreateWebViewResult &obj);

private:
  static WindowsCreateWebViewResult
  FromEncodableList(const ::flutter::EncodableList &list);
  ::flutter::EncodableList ToEncodableList() const;
  friend class WindowsWebViewHostApi;
  friend class PigeonInternalCodecSerializer;
  int64_t texture_id_;
};

// Generated class from Pigeon that represents data sent in messages.
class WindowsCookieData {
public:
  // Constructs an object setting all non-nullable fields.
  explicit WindowsCookieData(const std::string &name, const std::string &value,
                             const std::string &domain,
                             const std::string &path);

  // Constructs an object setting all fields.
  explicit WindowsCookieData(const std::string &name, const std::string &value,
                             const std::string &domain, const std::string &path,
                             const double *expires, const bool *is_http_only,
                             const bool *is_secure, const int64_t *same_site,
                             const bool *is_session);

  const std::string &name() const;
  void set_name(std::string_view value_arg);

  const std::string &value() const;
  void set_value(std::string_view value_arg);

  const std::string &domain() const;
  void set_domain(std::string_view value_arg);

  const std::string &path() const;
  void set_path(std::string_view value_arg);

  const double *expires() const;
  void set_expires(const double *value_arg);
  void set_expires(double value_arg);

  const bool *is_http_only() const;
  void set_is_http_only(const bool *value_arg);
  void set_is_http_only(bool value_arg);

  const bool *is_secure() const;
  void set_is_secure(const bool *value_arg);
  void set_is_secure(bool value_arg);

  const int64_t *same_site() const;
  void set_same_site(const int64_t *value_arg);
  void set_same_site(int64_t value_arg);

  const bool *is_session() const;
  void set_is_session(const bool *value_arg);
  void set_is_session(bool value_arg);

  bool operator==(const WindowsCookieData &other) const;
  bool operator!=(const WindowsCookieData &other) const;
  /// Returns a hash code value for the object. This method is supported for the
  /// benefit of hash tables.
  size_t Hash() const;
  /// Stream output operator for formatted string representation.
  friend std::ostream &operator<<(std::ostream &os,
                                  const WindowsCookieData &obj);

private:
  static WindowsCookieData
  FromEncodableList(const ::flutter::EncodableList &list);
  ::flutter::EncodableList ToEncodableList() const;
  friend class WindowsWebViewHostApi;
  friend class PigeonInternalCodecSerializer;
  std::string name_;
  std::string value_;
  std::string domain_;
  std::string path_;
  std::optional<double> expires_;
  std::optional<bool> is_http_only_;
  std::optional<bool> is_secure_;
  std::optional<int64_t> same_site_;
  std::optional<bool> is_session_;
};

// Generated class from Pigeon that represents data sent in messages.
class WindowsPointData {
public:
  // Constructs an object setting all fields.
  explicit WindowsPointData(double x, double y);

  double x() const;
  void set_x(double value_arg);

  double y() const;
  void set_y(double value_arg);

  bool operator==(const WindowsPointData &other) const;
  bool operator!=(const WindowsPointData &other) const;
  /// Returns a hash code value for the object. This method is supported for the
  /// benefit of hash tables.
  size_t Hash() const;
  /// Stream output operator for formatted string representation.
  friend std::ostream &operator<<(std::ostream &os,
                                  const WindowsPointData &obj);

private:
  static WindowsPointData
  FromEncodableList(const ::flutter::EncodableList &list);
  ::flutter::EncodableList ToEncodableList() const;
  friend class WindowsWebViewHostApi;
  friend class PigeonInternalCodecSerializer;
  double x_;
  double y_;
};

// Generated class from Pigeon that represents data sent in messages.
class WindowsSizeData {
public:
  // Constructs an object setting all fields.
  explicit WindowsSizeData(double width, double height, double scale_factor);

  double width() const;
  void set_width(double value_arg);

  double height() const;
  void set_height(double value_arg);

  double scale_factor() const;
  void set_scale_factor(double value_arg);

  bool operator==(const WindowsSizeData &other) const;
  bool operator!=(const WindowsSizeData &other) const;
  /// Returns a hash code value for the object. This method is supported for the
  /// benefit of hash tables.
  size_t Hash() const;
  /// Stream output operator for formatted string representation.
  friend std::ostream &operator<<(std::ostream &os, const WindowsSizeData &obj);

private:
  static WindowsSizeData
  FromEncodableList(const ::flutter::EncodableList &list);
  ::flutter::EncodableList ToEncodableList() const;
  friend class WindowsWebViewHostApi;
  friend class PigeonInternalCodecSerializer;
  double width_;
  double height_;
  double scale_factor_;
};

// Generated class from Pigeon that represents data sent in messages.
class WindowsPointerUpdateData {
public:
  // Constructs an object setting all fields.
  explicit WindowsPointerUpdateData(int64_t pointer, int64_t event, double x,
                                    double y, double size, double pressure);

  int64_t pointer() const;
  void set_pointer(int64_t value_arg);

  int64_t event() const;
  void set_event(int64_t value_arg);

  double x() const;
  void set_x(double value_arg);

  double y() const;
  void set_y(double value_arg);

  double size() const;
  void set_size(double value_arg);

  double pressure() const;
  void set_pressure(double value_arg);

  bool operator==(const WindowsPointerUpdateData &other) const;
  bool operator!=(const WindowsPointerUpdateData &other) const;
  /// Returns a hash code value for the object. This method is supported for the
  /// benefit of hash tables.
  size_t Hash() const;
  /// Stream output operator for formatted string representation.
  friend std::ostream &operator<<(std::ostream &os,
                                  const WindowsPointerUpdateData &obj);

private:
  static WindowsPointerUpdateData
  FromEncodableList(const ::flutter::EncodableList &list);
  ::flutter::EncodableList ToEncodableList() const;
  friend class WindowsWebViewHostApi;
  friend class PigeonInternalCodecSerializer;
  int64_t pointer_;
  int64_t event_;
  double x_;
  double y_;
  double size_;
  double pressure_;
};

// Generated class from Pigeon that represents data sent in messages.
class WindowsPointerButtonData {
public:
  // Constructs an object setting all fields.
  explicit WindowsPointerButtonData(int64_t button, bool is_down);

  int64_t button() const;
  void set_button(int64_t value_arg);

  bool is_down() const;
  void set_is_down(bool value_arg);

  bool operator==(const WindowsPointerButtonData &other) const;
  bool operator!=(const WindowsPointerButtonData &other) const;
  /// Returns a hash code value for the object. This method is supported for the
  /// benefit of hash tables.
  size_t Hash() const;
  /// Stream output operator for formatted string representation.
  friend std::ostream &operator<<(std::ostream &os,
                                  const WindowsPointerButtonData &obj);

private:
  static WindowsPointerButtonData
  FromEncodableList(const ::flutter::EncodableList &list);
  ::flutter::EncodableList ToEncodableList() const;
  friend class WindowsWebViewHostApi;
  friend class PigeonInternalCodecSerializer;
  int64_t button_;
  bool is_down_;
};

// Generated class from Pigeon that represents data sent in messages.
class WindowsVirtualHostMappingData {
public:
  // Constructs an object setting all fields.
  explicit WindowsVirtualHostMappingData(const std::string &host_name,
                                         const std::string &path,
                                         int64_t access_kind);

  const std::string &host_name() const;
  void set_host_name(std::string_view value_arg);

  const std::string &path() const;
  void set_path(std::string_view value_arg);

  int64_t access_kind() const;
  void set_access_kind(int64_t value_arg);

  bool operator==(const WindowsVirtualHostMappingData &other) const;
  bool operator!=(const WindowsVirtualHostMappingData &other) const;
  /// Returns a hash code value for the object. This method is supported for the
  /// benefit of hash tables.
  size_t Hash() const;
  /// Stream output operator for formatted string representation.
  friend std::ostream &operator<<(std::ostream &os,
                                  const WindowsVirtualHostMappingData &obj);

private:
  static WindowsVirtualHostMappingData
  FromEncodableList(const ::flutter::EncodableList &list);
  ::flutter::EncodableList ToEncodableList() const;
  friend class WindowsWebViewHostApi;
  friend class PigeonInternalCodecSerializer;
  std::string host_name_;
  std::string path_;
  int64_t access_kind_;
};

// Generated class from Pigeon that represents data sent in messages.
class WindowsLoadRequestData {
public:
  // Constructs an object setting all non-nullable fields.
  explicit WindowsLoadRequestData(const std::string &url,
                                  const std::string &method,
                                  const std::string &headers);

  // Constructs an object setting all fields.
  explicit WindowsLoadRequestData(const std::string &url,
                                  const std::string &method,
                                  const std::string &headers,
                                  const std::vector<uint8_t> *body);

  const std::string &url() const;
  void set_url(std::string_view value_arg);

  const std::string &method() const;
  void set_method(std::string_view value_arg);

  const std::string &headers() const;
  void set_headers(std::string_view value_arg);

  const std::vector<uint8_t> *body() const;
  void set_body(const std::vector<uint8_t> *value_arg);
  void set_body(const std::vector<uint8_t> &value_arg);

  bool operator==(const WindowsLoadRequestData &other) const;
  bool operator!=(const WindowsLoadRequestData &other) const;
  /// Returns a hash code value for the object. This method is supported for the
  /// benefit of hash tables.
  size_t Hash() const;
  /// Stream output operator for formatted string representation.
  friend std::ostream &operator<<(std::ostream &os,
                                  const WindowsLoadRequestData &obj);

private:
  static WindowsLoadRequestData
  FromEncodableList(const ::flutter::EncodableList &list);
  ::flutter::EncodableList ToEncodableList() const;
  friend class WindowsWebViewHostApi;
  friend class PigeonInternalCodecSerializer;
  std::string url_;
  std::string method_;
  std::string headers_;
  std::optional<std::vector<uint8_t>> body_;
};

class PigeonInternalCodecSerializer
    : public ::flutter::StandardCodecSerializer {
public:
  PigeonInternalCodecSerializer();
  inline static PigeonInternalCodecSerializer &GetInstance() {
    static PigeonInternalCodecSerializer sInstance;
    return sInstance;
  }

  void WriteValue(const ::flutter::EncodableValue &value,
                  ::flutter::ByteStreamWriter *stream) const override;

protected:
  ::flutter::EncodableValue
  ReadValueOfType(uint8_t type,
                  ::flutter::ByteStreamReader *stream) const override;
};

// Generated interface from Pigeon that represents a handler of messages from
// Flutter.
class WindowsWebViewHostApi {
public:
  WindowsWebViewHostApi(const WindowsWebViewHostApi &) = delete;
  WindowsWebViewHostApi &operator=(const WindowsWebViewHostApi &) = delete;
  virtual ~WindowsWebViewHostApi() {}
  virtual std::optional<FlutterError>
  InitializeEnvironment(const WindowsEnvironmentOptions &options) = 0;
  virtual ErrorOr<std::optional<std::string>> GetWebViewVersion() = 0;
  virtual std::optional<FlutterError> OpenWebView2DownloadPage() = 0;
  virtual void
  CreateWebView(std::function<void(ErrorOr<WindowsCreateWebViewResult> reply)>
                    result) = 0;
  virtual std::optional<FlutterError> DisposeWebView(int64_t texture_id) = 0;
  virtual std::optional<FlutterError> LoadUrl(int64_t texture_id,
                                              const std::string &url) = 0;
  virtual std::optional<FlutterError>
  LoadRequest(int64_t texture_id, const WindowsLoadRequestData &request) = 0;
  virtual std::optional<FlutterError>
  LoadStringContent(int64_t texture_id, const std::string &content) = 0;
  virtual std::optional<FlutterError> Reload(int64_t texture_id) = 0;
  virtual std::optional<FlutterError> Stop(int64_t texture_id) = 0;
  virtual std::optional<FlutterError> GoBack(int64_t texture_id) = 0;
  virtual std::optional<FlutterError> GoForward(int64_t texture_id) = 0;
  virtual void AddScriptToExecuteOnDocumentCreated(
      int64_t texture_id, const std::string &script,
      std::function<void(ErrorOr<std::optional<std::string>> reply)>
          result) = 0;
  virtual std::optional<FlutterError>
  RemoveScriptToExecuteOnDocumentCreated(int64_t texture_id,
                                         const std::string &script_id) = 0;
  virtual void
  ExecuteScript(int64_t texture_id, const std::string &script,
                std::function<void(ErrorOr<std::string> reply)> result) = 0;
  virtual std::optional<FlutterError>
  PostWebMessage(int64_t texture_id, const std::string &message) = 0;
  virtual std::optional<FlutterError>
  SetUserAgent(int64_t texture_id, const std::string *user_agent) = 0;
  virtual ErrorOr<std::optional<std::string>>
  GetUserAgent(int64_t texture_id) = 0;
  virtual std::optional<FlutterError> SetJavaScriptEnabled(int64_t texture_id,
                                                           bool enabled) = 0;
  virtual void
  ClearCookies(int64_t texture_id,
               std::function<void(ErrorOr<bool> reply)> result) = 0;
  virtual std::optional<FlutterError>
  SetCookie(int64_t texture_id, const WindowsCookieData &cookie) = 0;
  virtual void GetCookies(
      int64_t texture_id, const std::string &url,
      std::function<void(ErrorOr<::flutter::EncodableList> reply)> result) = 0;
  virtual std::optional<FlutterError>
  DeleteCookie(int64_t texture_id, const WindowsCookieData &cookie) = 0;
  virtual std::optional<FlutterError>
  DeleteCookiesWithNameAndUrl(int64_t texture_id, const std::string &name,
                              const std::string &url) = 0;
  virtual std::optional<FlutterError> DeleteCookiesWithNameDomainAndPath(
      int64_t texture_id, const std::string &name, const std::string &domain,
      const std::string &path) = 0;
  virtual std::optional<FlutterError> ClearCache(int64_t texture_id) = 0;
  virtual void ClearLocalStorage(
      int64_t texture_id,
      std::function<void(std::optional<FlutterError> reply)> result) = 0;
  virtual std::optional<FlutterError> SetCacheDisabled(int64_t texture_id,
                                                       bool disabled) = 0;
  virtual std::optional<FlutterError> OpenDevTools(int64_t texture_id) = 0;
  virtual std::optional<FlutterError> SetBackgroundColor(int64_t texture_id,
                                                         int64_t color) = 0;
  virtual std::optional<FlutterError> SetZoomControlEnabled(int64_t texture_id,
                                                            bool enabled) = 0;
  virtual std::optional<FlutterError> SetZoomFactor(int64_t texture_id,
                                                    double zoom_factor) = 0;
  virtual std::optional<FlutterError> SetPopupWindowPolicy(int64_t texture_id,
                                                           int64_t policy) = 0;
  virtual std::optional<FlutterError>
  SetNavigationRequestCallbacksEnabled(int64_t texture_id, bool enabled) = 0;
  virtual std::optional<FlutterError>
  SetJavaScriptDialogCallbacksEnabled(int64_t texture_id, bool alert,
                                      bool confirm, bool prompt) = 0;
  virtual std::optional<FlutterError> Suspend(int64_t texture_id) = 0;
  virtual std::optional<FlutterError> Resume(int64_t texture_id) = 0;
  virtual std::optional<FlutterError>
  SetVirtualHostNameMapping(int64_t texture_id,
                            const WindowsVirtualHostMappingData &mapping) = 0;
  virtual std::optional<FlutterError>
  ClearVirtualHostNameMapping(int64_t texture_id,
                              const std::string &host_name) = 0;
  virtual std::optional<FlutterError> SetFpsLimit(int64_t texture_id,
                                                  int64_t max_fps) = 0;
  virtual std::optional<FlutterError>
  SetPointerUpdate(int64_t texture_id,
                   const WindowsPointerUpdateData &update) = 0;
  virtual std::optional<FlutterError>
  SetCursorPos(int64_t texture_id, const WindowsPointData &position) = 0;
  virtual std::optional<FlutterError>
  SetPointerButton(int64_t texture_id,
                   const WindowsPointerButtonData &button) = 0;
  virtual std::optional<FlutterError>
  SetScrollDelta(int64_t texture_id, const WindowsPointData &delta) = 0;
  virtual std::optional<FlutterError> SetSize(int64_t texture_id,
                                              const WindowsSizeData &size) = 0;

  // The codec used by WindowsWebViewHostApi.
  static const ::flutter::StandardMessageCodec &GetCodec();
  // Sets up an instance of `WindowsWebViewHostApi` to handle messages through
  // the `binary_messenger`.
  static void SetUp(::flutter::BinaryMessenger *binary_messenger,
                    WindowsWebViewHostApi *api);
  static void SetUp(::flutter::BinaryMessenger *binary_messenger,
                    WindowsWebViewHostApi *api,
                    const std::string &message_channel_suffix);
  static ::flutter::EncodableValue WrapError(std::string_view error_message);
  static ::flutter::EncodableValue WrapError(const FlutterError &error);

protected:
  WindowsWebViewHostApi() = default;
};
} // namespace coreframe_flutter_windows
#endif // PIGEON_WINDOWS_WEBVIEW_API_G_H_
