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

import 'package:pigeon/pigeon.dart';

@ConfigurePigeon(
  PigeonOptions(
    dartOut: 'lib/src/messages.g.dart',
    swiftOut: 'ios/url_launcher_ios/Sources/url_launcher_ios/messages.g.swift',
    copyrightHeader: 'pigeons/copyright.txt',
  ),
)
/// Possible outcomes of launching a URL.
enum LaunchResult {
  /// The URL was successfully launched (or could be, for `canLaunchUrl`).
  success,

  /// There was no handler available for the URL.
  failure,

  /// The URL could not be launched because it is invalid.
  invalidUrl,
}

/// Possible outcomes of handling a URL within the application.
enum InAppLoadResult {
  /// The URL was successfully loaded.
  success,

  /// The URL did not load successfully.
  failedToLoad,

  /// The URL could not be launched because it is invalid.
  invalidUrl,

  /// The controller was closed before loading.
  dismissed,
}

@HostApi()
abstract class UrlLauncherApi {
  /// Checks whether a URL can be loaded.
  @ObjCSelector('canLaunchURL:')
  LaunchResult canLaunchUrl(String url);

  /// Opens the URL externally, returning the status of launching it.
  @async
  @ObjCSelector('launchURL:universalLinksOnly:')
  LaunchResult launchUrl(String url, bool universalLinksOnly);

  /// Opens the URL in an in-app SFSafariViewController, returning the results
  /// of loading it.
  @async
  @ObjCSelector('openSafariViewControllerWithURL:')
  InAppLoadResult openUrlInSafariViewController(String url);

  /// Closes the view controller opened by [openUrlInSafariViewController].
  void closeSafariViewController();
}
