import type { NobjcObject } from "objc-js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSDate } from "../Foundation/NSDate.js";
import type { _NSDateComponents } from "../Foundation/NSDateComponents.js";
import type { _NSDictionary } from "../Foundation/NSDictionary.js";
import type { _NSError } from "../Foundation/NSError.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _NSPredicate } from "../Foundation/NSPredicate.js";
import type { _NSSet } from "../Foundation/NSSet.js";
import type { _HKActivityMoveModeObject } from "./HKActivityMoveModeObject.js";
import type { _HKBiologicalSexObject } from "./HKBiologicalSexObject.js";
import type { _HKBloodTypeObject } from "./HKBloodTypeObject.js";
import type { _HKFitzpatrickSkinTypeObject } from "./HKFitzpatrickSkinTypeObject.js";
import type { _HKObject } from "./HKObject.js";
import type { _HKObjectType } from "./HKObjectType.js";
import type { _HKQuantity } from "./HKQuantity.js";
import type { _HKQuery } from "./HKQuery.js";
import type { _HKSample } from "./HKSample.js";
import type { _HKSampleType } from "./HKSampleType.js";
import type { _HKWheelchairUseObject } from "./HKWheelchairUseObject.js";
import type { _HKWorkout } from "./HKWorkout.js";
import type { _HKWorkoutActivity } from "./HKWorkoutActivity.js";
import type { _HKWorkoutConfiguration } from "./HKWorkoutConfiguration.js";
import type { _HKWorkoutSession } from "./HKWorkoutSession.js";
import type { HKAuthorizationRequestStatus } from "./HKAuthorizationRequestStatus.js";
import type { HKAuthorizationStatus } from "./HKAuthorizationStatus.js";
import type { HKUpdateFrequency } from "./HKUpdateFrequency.js";
export declare class _HKHealthStore extends _NSObject {
    static alloc(): _HKHealthStore;
    static new(): _HKHealthStore;
    init(): _HKHealthStore;
    /**
     * @method isHealthDataAvailable @abstract Returns YES if HealthKit is supported on the device. @discussion HealthKit is not supported on all iOS devices. Using HKHealthStore APIs on devices which are not supported will result in errors with the HKErrorHealthDataUnavailable code. Call isHealthDataAvailable before attempting to use other parts of the framework.
     */
    static isHealthDataAvailable(): boolean;
    /**
     * @method supportsHealthRecords @abstract Returns YES if the Health Records feature is available. @discussion The Health Records feature is not available in all regions but may be present in unsupported regions if accounts have already been configured. This can change as accounts are modified during device restore or synchronization. Call supportsHealthRecords before attempting to request authorization for any clinical types.
     */
    supportsHealthRecords(): boolean;
    /**
     * @method authorizationStatusForType: @abstract Returns the application's authorization status for the given object type.
     */
    authorizationStatusForType$(type: _HKObjectType): HKAuthorizationStatus;
    /**
     * @method requestAuthorizationToShareTypes:readTypes:completion: @abstract Prompts the user to authorize the application for reading and saving objects of the given types. @discussion Before attempting to execute queries or save objects, the application should first request authorization from the user to read and share every type of object for which the application may require access. The request is performed asynchronously and its completion will be executed on an arbitrary background queue after the user has responded. If the user has already chosen whether to grant the application access to all of the types provided, then the completion will be called without prompting the user. The success parameter of the completion indicates whether prompting the user, if necessary, completed successfully and was not cancelled by the user. It does NOT indicate whether the application was granted authorization. To customize the messages displayed on the authorization sheet, set the following keys in your app's Info.plist file. Set the NSHealthShareUsageDescription key to customize the message for reading data. Set the NSHealthUpdateUsageDescription key to customize the message for writing data.
     */
    requestAuthorizationToShareTypes$readTypes$completion$(typesToShare: _NSSet | null, typesToRead: _NSSet | null, completion: ((success: boolean, error: _NSError) => void) | null): void;
    /**
     * @method requestPerObjectReadAuthorizationForType:predicate:completion: @abstract For types that support per object authorization (like vision prescriptions), prompts the user to select the objects for which they want to grant your app access. @discussion Before attempting to execute queries, the application should first request authorization from the user to read objects for which the application may require access. The request is performed asynchronously, and its completion will be executed on an arbitrary background queue after the user has responded. The user will always be prompted to provide access to objects regardless of whether access had been previously provided. The user can choose to toggle each object's access with each prompt. The success parameter of the completion indicates whether prompting the user completed successfully and was not cancelled. It does NOT indicate whether the application was granted authorization.
     */
    requestPerObjectReadAuthorizationForType$predicate$completion$(objectType: _HKObjectType, predicate: _NSPredicate | null, completion: ((success: boolean, error: _NSError) => void) | null): void;
    /**
     * @method getRequestStatusForAuthorizationToShareTypes:readTypes:completion: @abstract Determines whether requesting authorization for the given types is necessary. @discussion Applications may call this method to determine whether the user would be prompted for authorization if the same collections of types are passed to requestAuthorizationToShareTypes:readTypes:completion:. This determination is performed asynchronously and its completion will be executed on an arbitrary background queue.
     */
    getRequestStatusForAuthorizationToShareTypes$readTypes$completion$(typesToShare: _NSSet, typesToRead: _NSSet, completion: ((requestStatus: HKAuthorizationRequestStatus, error: _NSError) => void) | null): void;
    /**
     * @method handleAuthorizationForExtensionWithCompletion: @abstract Prompts the user to authorize the application for reading and saving objects. @discussion When an app extension calls requestAuthorizationToShareTypes:readTypes:completion:, the parent application is responsible for calling this method to prompt the user to authorize the app and its extensions for the types that the extension requested access to. The request is performed asynchronously and its completion will be executed on an arbitrary background queue after the user has responded. The success parameter of the completion indicates whether prompting the user, if necessary, completed successfully and was not cancelled by the user. It does NOT indicate whether the application was granted authorization.
     */
    handleAuthorizationForExtensionWithCompletion$(completion: ((success: boolean, error: _NSError) => void) | null): void;
    /**
     * @method earliestPermittedSampleDate @abstract Samples prior to the earliestPermittedSampleDate cannot be saved or queried. @discussion On some platforms, only samples with end dates newer than the value returned by earliestPermittedSampleDate may be saved or retrieved.
     */
    earliestPermittedSampleDate(): _NSDate;
    /**
     * @method saveObject:withCompletion: @abstract Saves an HKObject. @discussion After an object is saved, on subsequent retrievals the sourceRevision property of the object will be set to the HKSourceRevision representing the version of the application that saved it. If the object has an HKObjectType property, then in order to save an object successfully the application must first request authorization to share objects with that type. Saving an object with the same unique identifier as another object that has already been saved will fail. When the application attempts to save multiple objects, if any single object cannot be saved then none of the objects will be saved. The operation will fail if the objects array contains samples with endDates that are older than the date returned by earliestPermittedSampleDate. This operation is performed asynchronously and the completion will be executed on an arbitrary background queue.
     */
    saveObject$withCompletion$(object_: _HKObject, completion: ((success: boolean, error: _NSError) => void) | null): void;
    /**
     * @method saveObjects:withCompletion: @abstract Saves an array of HKObjects. @discussion See discussion of saveObject:withCompletion:.
     */
    saveObjects$withCompletion$(objects: _NSArray, completion: ((success: boolean, error: _NSError) => void) | null): void;
    /**
     * @method deleteObject:withCompletion: @abstract Deletes a single HKObject from the HealthKit database. @discussion See deleteObjects:withCompletion:.
     */
    deleteObject$withCompletion$(object_: _HKObject, completion: ((success: boolean, error: _NSError) => void) | null): void;
    /**
     * @method deleteObjects:withCompletion: @abstract Deletes multiple HKObjects from the HealthKit database. @discussion An application may only delete objects that it previously saved. This operation is performed asynchronously and the completion will be executed on an arbitrary background queue.
     */
    deleteObjects$withCompletion$(objects: _NSArray, completion: ((success: boolean, error: _NSError) => void) | null): void;
    /**
     * @method deleteObjectsOfType:predicate:withCompletion: @abstract Deletes all objects matching the given predicate from the HealthKit database. @discussion An application may only delete objects that it previously saved. This operation is performed asynchronously and the completion will be executed on an arbitrary background queue.
     */
    deleteObjectsOfType$predicate$withCompletion$(objectType: _HKObjectType, predicate: _NSPredicate, completion: ((success: boolean, deletedObjectCount: number, error: _NSError) => void) | null): void;
    /**
     * @method executeQuery: @abstract Begins executing the given query. @discussion After executing a query, the completion, update, and/or results handlers of that query will be invoked asynchronously on an arbitrary background queue as results become available. Errors that prevent a query from executing will be delivered to one of the query's handlers. Which handler the error will be delivered to is defined by the HKQuery subclass. Each HKQuery instance may only be executed once and calling this method with a currently executing query or one that was previously executed will result in an exception. If a query would retrieve objects with an HKObjectType property, then the application must request authorization to access objects of that type before executing the query.
     */
    executeQuery$(query: _HKQuery): void;
    /**
     * @method stopQuery: @abstract Stops a query that is executing from continuing to run. @discussion Calling this method will prevent the handlers of the query from being invoked in the future. If the query is already stopped, this method does nothing.
     */
    stopQuery$(query: _HKQuery): void;
    /**
     * @method splitTotalEnergy:startDate:endDate:resultsHandler: @abstract For the time period specified, this method calculates the resting and active energy parts of the total energy provided. @discussion This method uses the user's metrics like age, biological sex, body mass and height to determine their basal metabolic rate. If the application does not have authorization to access these characteristics or if the user has not entered their data then this method uses builtin default values.
     * @deprecated No longer supported
     */
    splitTotalEnergy$startDate$endDate$resultsHandler$(totalEnergy: _HKQuantity, startDate: _NSDate, endDate: _NSDate, resultsHandler: ((restingEnergy: _HKQuantity, activeEnergy: _HKQuantity, error: _NSError) => void) | null): void;
    /** @deprecated dateOfBirthComponentsWithError: */
    dateOfBirthWithError$(error: NobjcObject | null): _NSDate | null;
    /**
     * @method dateOfBirthComponentsWithError: @abstract Returns the user's date of birth in the Gregorian calendar. @discussion Before calling this method, the application should request authorization to access objects with the HKCharacteristicType identified by HKCharacteristicTypeIdentifierDateOfBirth.
     */
    dateOfBirthComponentsWithError$(error: NobjcObject | null): _NSDateComponents | null;
    /**
     * @method biologicalSexWithError: @abstract Returns an object encapsulating the user's biological sex. @discussion Before calling this method, the application should request authorization to access objects with the HKCharacteristicType identified by HKCharacteristicTypeIdentifierBiologicalSex.
     */
    biologicalSexWithError$(error: NobjcObject | null): _HKBiologicalSexObject | null;
    /**
     * @method bloodTypeWithError: @abstract Returns an object encapsulating the user's blood type. @discussion Before calling this method, the application should request authorization to access objects with the HKCharacteristicType identified by HKCharacteristicTypeIdentifierBloodType.
     */
    bloodTypeWithError$(error: NobjcObject | null): _HKBloodTypeObject | null;
    /**
     * @method fitzpatrickSkinTypeWithError: @abstract Returns an object encapsulating the user's Fitzpatrick skin type. @discussion Before calling this method, the application should request authorization to access objects with the HKCharacteristicType identified by HKCharacteristicTypeIdentifierFitzpatrickSkinType.
     */
    fitzpatrickSkinTypeWithError$(error: NobjcObject | null): _HKFitzpatrickSkinTypeObject | null;
    /**
     * @method wheelchairUseWithError: @abstract Returns an object encapsulating the user's wheelchair use. @discussion Before calling this method, the application should request authorization to access objects with the HKCharacteristicType identified by HKCharacteristicTypeIdentifierWheelchairUse.
     */
    wheelchairUseWithError$(error: NobjcObject | null): _HKWheelchairUseObject | null;
    /**
     * @method activityMoveModeWithError: @abstract Returns an object encapsulating the user's activity move mode @discussion Before calling this method, the application should request authorization to access objects with the HKCharacteristicType identified by HKCharacteristicTypeIdentifierActivityMoveMode.
     */
    activityMoveModeWithError$(error: NobjcObject | null): _HKActivityMoveModeObject | null;
    /**
     * @method addSamples:toWorkout:completion: @abstract Associates samples with a given workout. @discussion This will associate the given samples with the given workout. These samples will then be returned by a query that contains this workout as a predicate. If a sample is added that is not saved yet, then it will be saved for you. Note that the sample will be saved without an HKDevice. The workout provided must be one that has already been saved to HealthKit.
     * @deprecated Use HKWorkoutBuilder
     */
    addSamples$toWorkout$completion$(samples: _NSArray, workout: _HKWorkout, completion: ((success: boolean, error: _NSError) => void) | null): void;
    /**
     * @method startWorkoutSession: @abstract Starts the given workout session. @discussion This method will asynchronously begin a workout session. The methods on the session's delegate will be called when the session has successfully started or fails to start.
     * @deprecated Use HKWorkoutSession's start method
     */
    startWorkoutSession$(workoutSession: _HKWorkoutSession): void;
    /**
     * @method endWorkoutSession: @abstract Ends the given workout session. @discussion This method will end the given session if it is currently running. The state of the workout session will transition to HKWorkoutSessionStateEnded. Once a workout session is ended, it cannot be reused to start a new workout session.
     * @deprecated Use HKWorkoutSession's end method
     */
    endWorkoutSession$(workoutSession: _HKWorkoutSession): void;
    /**
     * @method pauseWorkoutSession: @abstract Pauses the given workout session. @discussion This method will pause the given session if it is currently running. The state of the workout session will transition to HKWorkoutSessionStatePaused. An HKWorkoutEventTypePause will be generated and delivered to the workout session's delegate.
     * @deprecated Use HKWorkoutSession's pause method
     */
    pauseWorkoutSession$(workoutSession: _HKWorkoutSession): void;
    /**
     * @method resumeWorkoutSession: @abstract Resumes the given workout session. @discussion This method will resume the given session if it is currently paused. The state of the workout session will transition to HKWorkoutSessionStateRunning. An HKWorkoutEventTypeResume will be generated and delivered to the workout session's delegate.
     * @deprecated Use HKWorkoutSession's resume method
     */
    resumeWorkoutSession$(workoutSession: _HKWorkoutSession): void;
    /**
     * @method startWatchAppWithWorkoutConfiguration:completion: @abstract Launches or wakes up the WatchKit app on the watch @discussion This method will launch the WatchKit app corresponding to the calling iOS application on the currently active Apple Watch. After launching, the handleWorkoutConfiguration: method on the WKExtensionDelegate protocol will be called with the HKWorkoutConfiguration as a parameter. The receiving Watch app can use this configuration object to create an HKWorkoutSession and start it with -startWorkoutSession:.
     */
    startWatchAppWithWorkoutConfiguration$completion$(workoutConfiguration: _HKWorkoutConfiguration, completion: ((success: boolean, error: _NSError) => void) | null): void;
    /**
     * @method recoverActiveWorkoutSessionWithCompletion: @abstract Recovers an active workout session after a client crash. If no session is available to be re-attached, nil will be returned. If an error occurs, session will be nil and error will be set appropriately.
     */
    recoverActiveWorkoutSessionWithCompletion$(completion: ((_result: _HKWorkoutSession, error: _NSError) => void) | null): void;
    /**
     * @method enableBackgroundDeliveryForType:frequency:withCompletion: @abstract This method enables activation of your app when data of the type is recorded at the cadence specified. @discussion When an app has subscribed to a certain data type it will get activated at the cadence that is specified with the frequency parameter. The app is still responsible for creating an HKObserverQuery to know which data types have been updated and the corresponding fetch queries. Note that certain data types (such as HKQuantityTypeIdentifierStepCount) have a minimum frequency of HKUpdateFrequencyHourly. This is enforced transparently to the caller.
     */
    enableBackgroundDeliveryForType$frequency$withCompletion$(type: _HKObjectType, frequency: HKUpdateFrequency, completion: ((success: boolean, error: _NSError) => void) | null): void;
    disableBackgroundDeliveryForType$withCompletion$(type: _HKObjectType, completion: ((success: boolean, error: _NSError) => void) | null): void;
    disableAllBackgroundDeliveryWithCompletion$(completion: ((success: boolean, error: _NSError) => void) | null): void;
    /**
     * @method preferredUnitsForQuantityTypes:completion: @abstract Calls the completion with the preferred HKUnits for a given set of HKQuantityTypes. @discussion A preferred unit is either the unit that the user has chosen in Health for displaying samples of the given quantity type or the default unit for that type in the current locale of the device. To access the user's preferences it is necessary to request read or share authorization for the set of HKQuantityTypes provided. If neither read nor share authorization has been granted to the app, then the default unit for the locale is provided. An error will be returned when preferred units are inaccessible because protected health data is unavailable or authorization status is not determined for one or more of the provided types. The returned dictionary will map HKQuantityType to HKUnit.
     */
    preferredUnitsForQuantityTypes$completion$(quantityTypes: _NSSet, completion: ((preferredUnits: _NSDictionary, error: _NSError) => void) | null): void;
    /**
     * @method recalibrateEstimatesForSampleType:atDate:completion: @abstract Recalibrates the prediction algorithm used for this sample type. @discussion Check -[HKSampleType allowsRecalibrationForEstimates] to see if a given sample type is supported. Calling this method results in first-party estimation algorithms to recalibrate what data is used when generating values for HKSamples of this sampleType.
     */
    recalibrateEstimatesForSampleType$atDate$completion$(sampleType: _HKSampleType, date: _NSDate, completion: ((success: boolean, error: _NSError) => void) | null): void;
    /**
     * @method relateWorkoutEffortSample:withWorkout:activity:completion @abstract Relates a workout effort sample with a workout @param sample The workout effort sample @param workout The HKWorkout to relate the sample to @param activity The HKWorkoutActivity on the HKWorkout @param completion The block to be called when the sample has been related
     */
    relateWorkoutEffortSample$withWorkout$activity$completion$(sample: _HKSample, workout: _HKWorkout, activity: _HKWorkoutActivity | null, completion: ((success: boolean, error: _NSError) => void) | null): void;
    /**
     * @method unrelateWorkoutEffortSample:fromWorkout:activity:completion @abstract Unrelates a workout effort sample from a workout @param sample The workout effort sample @param workout The HKWorkout to unrelate the sample from @param activity The HKWorkoutActivity on the HKWorkout @param completion The block to be called when the sample has been unrelated
     */
    unrelateWorkoutEffortSample$fromWorkout$activity$completion$(sample: _HKSample, workout: _HKWorkout, activity: _HKWorkoutActivity | null, completion: ((success: boolean, error: _NSError) => void) | null): void;
    /**
     * @property workoutSessionMirroringStartHandler @abstract Called when a session has started mirroring. @discussion This property should always be assigned a value promptly after your app is launched, to ensure it is always observing for incoming mirrored workout sessions. If your app is not active when a mirrored session starts, it will be launched in the background and given a one-time permission to start a Live Activity from the background. The assigned block will be executed on an arbitrary background queue.
     */
    workoutSessionMirroringStartHandler(): (arg0: _HKWorkoutSession) => void;
    setWorkoutSessionMirroringStartHandler$(value: (arg0: _HKWorkoutSession) => void): void;
}
