/*
 * Copyright (c) 2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License"),
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @file Word Selection Extension Context
 * @kit BasicServicesKit
 */

import ExtensionContext from './application/ExtensionContext';
import Want from './@ohos.app.ability.Want';

/**
 * **SelectionExtensionContext** is the context of 
 * [SelectionExtensionAbility]{@link @ohos.selectionInput.SelectionExtensionAbility:SelectionExtensionAbility}, which 
 * inherits from [ExtensionContext]{@link ./application/ExtensionContext:ExtensionContext}.
 * 
 * When a **SelectionExtensionAbility** component is instantiated, the system automatically creates the corresponding 
 * **SelectionExtensionContext**. You can call the [startAbility](#startability) API in **SelectionExtensionContext** to 
 * start other abilities in the same app. This is applicable when you need to redirect to another ability in the same 
 * app in word selection extension, helping users quickly obtain the functions or information associated with the 
 * selected word.
 * 
 * > **NOTE**
 * >
 * > - This module is supported only on PCs/2-in-1 devices. You can use 
 * > **canIUse('SystemCapability.SelectionInput.Selection')** to check whether the current device supports this 
 * > function.
 *
 * @syscap SystemCapability.SelectionInput.Selection
 * @systemapi [since 20 - 23]
 * @publicapi [since 24]
 * @stagemodelonly
 * @since 20 dynamic
 * @since 24 static
 */
declare class SelectionExtensionContext extends ExtensionContext {
  /**
   * Starts the target ability in the same app. This method is applicable when you need to redirect to another ability 
   * in the app in word selection extension. The system matches and starts the target ability based on the values of 
   * **bundleName** and **abilityName** specified in the **Want** object. This API uses a promise to return the result. 
   * For details about the ability startup mechanism, see 
   * [ExtensionContext]{@link ./application/ExtensionContext:ExtensionContext}.
   *
   * @param { Want } want - Information about the target app to start. The main fields include **bundleName** (bundle
   *     name of the target app) and **abilityName** (name of the target ability). After this parameter is set, the
   *     system searches for and starts the corresponding ability based on the specified bundle name and ability name.
   *     Only abilities within the same app can be started.
   * @returns { Promise<void> } Promise that returns no value.
   * @throws { BusinessError } 16000001 - The specified ability does not exist.
   * @throws { BusinessError } 16000002 - Incorrect ability type.
   * @throws { BusinessError } 16000004 - Cannot start an invisible component.
   * @throws { BusinessError } 16000005 - The specified process does not have the permission.
   * @throws { BusinessError } 16000006 - Cross-user operations are not allowed.
   * @throws { BusinessError } 16000008 - The crowdtesting application expires.
   * @throws { BusinessError } 16000009 - An ability cannot be started or stopped in Wukong mode.
   * @throws { BusinessError } 16000010 - The call with the continuation and prepare continuation flag is forbidden.
   * @throws { BusinessError } 16000011 - The context does not exist.
   * @throws { BusinessError } 16000012 - The application is controlled.
   * @throws { BusinessError } 16000013 - The application is controlled by EDM.
   * @throws { BusinessError } 16000019 - No matching ability is found.
   * @throws { BusinessError } 16000050 - Internal error.
   * @throws { BusinessError } 16000053 - The ability is not on the top of the UI.
   * @throws { BusinessError } 16000055 - Installation-free timed out.
   * @throws { BusinessError } 16000061 - Operation not supported.
   * @throws { BusinessError } 16000069 - The extension cannot start the third party application.
   * @throws { BusinessError } 16000070 - The extension cannot start the service.
   * @throws { BusinessError } 16000083 - The ExtensionAbility cannot start the ability due to system control.
   * @throws { BusinessError } 16200001 - The caller has been released.
   * @syscap SystemCapability.SelectionInput.Selection
   * @systemapi [since 20 - 23]
   * @publicapi [since 24]
   * @stagemodelonly
   * @since 20 dynamic
   * @since 24 static
   */
  startAbility(want: Want): Promise<void>;
}

export default SelectionExtensionContext;