/*

 * Copyright (C) 2023 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

 * @kit ConnectivityKit

 */



import type baseProfile from './@ohos.bluetooth.baseProfile';



/**

 * Provides methods to accessing bluetooth call-related capabilities.

 *

 * @syscap SystemCapability.Communication.Bluetooth.Core

 * @since 10 dynamic

 * @since 23 static

 */

declare namespace hfp {

  /**

   * Base interface of profile.

   *

   * @syscap SystemCapability.Communication.Bluetooth.Core

   * @since 10 dynamic

   * @since 23 static

   */

  type BaseProfile = baseProfile.BaseProfile;



  /**

   * create the instance of hfp profile.

   *

   * @returns { HandsFreeAudioGatewayProfile } Returns the instance of profile.

   * @throws { BusinessError } 401 - Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified.

   *     2. Incorrect parameter types. 3. Parameter verification failed.

   * @throws { BusinessError } 801 - Capability not supported.

   * @syscap SystemCapability.Communication.Bluetooth.Core

   * @since 10 dynamic

   * @since 23 static

   */

  function createHfpAgProfile(): HandsFreeAudioGatewayProfile;



  /**

   * create the instance of HF(Hands-Free Unit) for HFP(Hands-Free Profile).

   *

   * @returns { HandsFreeHfProfile } Returns the instance of profile.

   * @throws { BusinessError } 801 - Capability not supported.

   * @syscap SystemCapability.Communication.Bluetooth.Core

   * @stagemodelonly

   * @since 26.0.0 dynamic

   */

  function createHfpHfProfile(): HandsFreeHfProfile;



  /**

   * Manager hfp source profile.

   *

   * @syscap SystemCapability.Communication.Bluetooth.Core

   * @since 10 dynamic

   * @since 23 static

   */

  interface HandsFreeAudioGatewayProfile extends BaseProfile {

    /**

     * Initiate an HFP connection to a remote device.

     *

     * @permission ohos.permission.ACCESS_BLUETOOTH

     * @param { string } deviceId - Indicates device ID. For example, "11:22:33:AA:BB:FF".

     * @throws { BusinessError } 201 - Permission denied.

     * @throws { BusinessError } 202 - Non-system applications are not allowed to use system APIs.

     * @throws { BusinessError } 401 - Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified.

     *     2. Incorrect parameter types. 3. Parameter verification failed.

     * @throws { BusinessError } 801 - Capability not supported.

     * @throws { BusinessError } 2900001 - Service stopped.

     * @throws { BusinessError } 2900003 - Bluetooth disabled.

     * @throws { BusinessError } 2900004 - Profile not supported.

     * @throws { BusinessError } 2900099 - Operation failed.

     * @syscap SystemCapability.Communication.Bluetooth.Core

     * @systemapi

     * @since 10 dynamic

     * @since 23 static

     */

    connect(deviceId: string): void;



    /**

     * Disconnect the HFP connection with the remote device.

     *

     * @permission ohos.permission.ACCESS_BLUETOOTH

     * @param { string } deviceId - Indicates device ID. For example, "11:22:33:AA:BB:FF".

     * @throws { BusinessError } 201 - Permission denied.

     * @throws { BusinessError } 202 - Non-system applications are not allowed to use system APIs.

     * @throws { BusinessError } 401 - Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified.

     *     2. Incorrect parameter types. 3. Parameter verification failed.

     * @throws { BusinessError } 801 - Capability not supported.

     * @throws { BusinessError } 2900001 - Service stopped.

     * @throws { BusinessError } 2900003 - Bluetooth disabled.

     * @throws { BusinessError } 2900004 - Profile not supported.

     * @throws { BusinessError } 2900099 - Operation failed.

     * @syscap SystemCapability.Communication.Bluetooth.Core

     * @systemapi

     * @since 10 dynamic

     * @since 23 static

     */

    disconnect(deviceId: string): void;

  }



  /**

   * Manage hfp sink profile.

   *

   * @syscap SystemCapability.Communication.Bluetooth.Core

   * @stagemodelonly

   * @since 26.0.0 dynamic

   */

  interface HandsFreeHfProfile extends BaseProfile {

    /**

     * Initiate the HFP connection to a remote device.

     *

     * @permission ohos.permission.ACCESS_BLUETOOTH

     * @param { string } deviceId - Indicates device ID. For example, "11:22:33:AA:BB:FF".

     * @throws { BusinessError } 201 - Permission denied.

     * @throws { BusinessError } 202 - Non-system applications are not allowed to use system APIs.

     * @throws { BusinessError } 801 - Capability not supported.

     * @throws { BusinessError } 2900001 - Service stopped.

     * @throws { BusinessError } 2900003 - Bluetooth disabled.

     * @throws { BusinessError } 2900004 - Profile not supported.

     * @throws { BusinessError } 2900099 - Internal system error. For example, IPC error.

     * @syscap SystemCapability.Communication.Bluetooth.Core

     * @systemapi

     * @stagemodelonly

     * @since 26.0.0 dynamic

     */

    connect(deviceId: string): void;



    /**

     * Disconnect the HFP connection with the remote device.

     *

     * @permission ohos.permission.ACCESS_BLUETOOTH

     * @param { string } deviceId - Indicates device ID. For example, "11:22:33:AA:BB:FF".

     * @throws { BusinessError } 201 - Permission denied.

     * @throws { BusinessError } 202 - Non-system applications are not allowed to use system APIs.

     * @throws { BusinessError } 801 - Capability not supported.

     * @throws { BusinessError } 2900001 - Service stopped.

     * @throws { BusinessError } 2900003 - Bluetooth disabled.

     * @throws { BusinessError } 2900004 - Profile not supported.

     * @throws { BusinessError } 2900099 - Internal system error. For example, IPC error.

     * @syscap SystemCapability.Communication.Bluetooth.Core

     * @systemapi

     * @stagemodelonly

     * @since 26.0.0 dynamic

     */

    disconnect(deviceId: string): void;

  }

}



export default hfp;