import type { EventData } from '../data/observable';
import type { View } from '../ui/core/view';
import type { CoreTypes } from '../core-types';
import type { NativeWindow } from '../native-window';
/**
 * An extended JavaScript Error which will have the nativeError property initialized in case the error is caused by executing platform-specific code.
 */
export interface NativeScriptError extends Error {
    /**
     * Represents the native error object.
     */
    nativeException?: any;
    /**
     * The native stack trace.
     */
    stackTrace?: string;
    /**
     * Javascript portion of stack trace.
     */
    stack?: string;
}
/**
 * Event data containing information for the application events.
 */
export interface ApplicationEventData {
    /**
     * The name of the event.
     */
    eventName: string;
    /**
     * Gets the native iOS event arguments. Valid only when running on iOS.
     */
    ios?: any;
    /**
     * Gets the native Android event arguments. Valid only when running on Android.
     */
    android?: any;
    /**
     * The instance that has raised the event.
     */
    object: any;
}
/**
 * Event data containing information for launch event.
 */
export interface LaunchEventData extends EventData {
    /**
     * The root view for this Window on iOS or Activity for Android.
     * If not set a new Frame will be created as a root view in order to maintain backwards compatibility.
     * If explicitly set to null, there will be no root view.
     */
    root?: View | null;
    savedInstanceState?: any;
    android?: android.content.Intent;
    ios?: any;
}
/**
 * Event data containing information for orientation changed event.
 */
export interface OrientationChangedEventData extends ApplicationEventData {
    /**
     * New orientation value.
     */
    newValue: 'portrait' | 'landscape' | 'unknown';
}
/**
 * Event data containing information for system appearance changed event.
 */
export interface SystemAppearanceChangedEventData extends ApplicationEventData {
    /**
     * New system appearance value.
     */
    newValue: 'light' | 'dark';
}
/**
 * Event data containing information for system layout direction changed event.
 */
export interface LayoutDirectionChangedEventData extends ApplicationEventData {
    /**
     * New layout direction value.
     */
    newValue: CoreTypes.LayoutDirectionType;
}
/**
 * Event data containing information for font scale changed event.
 */
export interface FontScaleChangedEventData extends ApplicationEventData {
    /**
     * New font scale value.
     */
    newValue: number;
}
/**
 * Event data containing information about unhandled application errors.
 */
export interface UnhandledErrorEventData extends ApplicationEventData {
    ios?: NativeScriptError;
    android?: NativeScriptError;
    error: NativeScriptError;
}
/**
 * Event data containing information about discarded application errors.
 */
export interface DiscardedErrorEventData extends ApplicationEventData {
    error: NativeScriptError;
}
/**
 * Event data containing information about application css change.
 */
export interface CssChangedEventData extends ApplicationEventData {
    cssFile?: string;
    cssText?: string;
}
/**
 * Event data containing information about root view application.
 */
export interface InitRootViewEventData extends ApplicationEventData {
    rootView: View;
}
/**
 * Data for the Android activity events.
 */
export interface AndroidActivityEventData {
    /**
     * The activity.
     */
    activity: androidx.appcompat.app.AppCompatActivity;
    /**
     * The NativeWindow the activity belongs to, when one is registered for it.
     */
    window?: NativeWindow;
    /**
     * The name of the event.
     */
    eventName: string;
    /**
     * The instance that has raised the event.
     */
    object: any;
}
/**
 * Data for the Android activity events with bundle.
 */
export interface AndroidActivityBundleEventData extends AndroidActivityEventData {
    /**
     * The bundle.
     */
    bundle: android.os.Bundle;
}
/**
 * Data for the Android activity onRequestPermissions callback
 */
export interface AndroidActivityRequestPermissionsEventData extends AndroidActivityEventData {
    /**
     * The request code.
     */
    requestCode: number;
    /**
     * The Permissions.
     */
    permissions: Array<string>;
    /**
     * The Granted.
     */
    grantResults: Array<number>;
}
/**
 * Data for the Android activity result event.
 */
export interface AndroidActivityResultEventData extends AndroidActivityEventData {
    /**
     * The request code.
     */
    requestCode: number;
    /**
     * The result code.
     */
    resultCode: number;
    /**
     * The intent.
     */
    intent: android.content.Intent;
}
/**
 * Data for the Android activity newIntent event.
 */
export interface AndroidActivityNewIntentEventData extends AndroidActivityEventData {
    /**
     * The intent.
     */
    intent: any;
}
/**
 * Data for the Android activity back pressed event.
 */
export interface AndroidActivityBackPressedEventData extends AndroidActivityEventData {
    /**
     * In the event handler, set this value to true if you want to cancel the back navigation and do something else instead.
     */
    cancel: boolean;
}
export interface LoadAppCSSEventData extends ApplicationEventData {
    cssFile: string;
}
/**
 * iOS Event data containing information for scene lifecycle events (iOS 13+).
 */
export interface SceneEventData extends ApplicationEventData {
    /**
     * The UIWindowScene instance associated with this event.
     */
    scene?: UIWindowScene;
    /**
     * The UIWindow associated with this scene (if applicable).
     */
    uiWindow?: UIWindow;
    /**
     * The NativeWindow the scene belongs to, when one is registered for it.
     */
    window?: NativeWindow;
    /**
     * Scene connection options (for sceneWillConnect event).
     */
    connectionOptions?: UISceneConnectionOptions;
    /**
     * Additional user info from the notification.
     */
    userInfo?: NSDictionary<any, any>;
}
/**
 * iOS event data for the `sceneOpenURLContexts` event, raised when a scene is asked to open URLs.
 *
 * Replaces the `applicationOpenURLOptions` app delegate callback, which UIKit no longer
 * calls once the app adopts scenes. Handlers registered through
 * `Application.ios.addDelegateHandler('applicationOpenURLOptions', ...)` still run, once per context.
 */
export interface SceneOpenURLContextsEventData extends SceneEventData {
    /**
     * The URL contexts to open. A single delivery may carry more than one URL.
     */
    urlContexts: NSSet<UIOpenURLContext>;
}
/**
 * iOS event data for the `sceneContinueUserActivity` event, raised for Handoff and
 * universal links directed at a scene.
 *
 * Replaces the `applicationContinueUserActivityRestorationHandler` app delegate callback,
 * which UIKit no longer calls once the app adopts scenes.
 */
export interface SceneContinueUserActivityEventData extends SceneEventData {
    /**
     * The activity to continue.
     */
    userActivity: NSUserActivity;
}
/**
 * iOS event data for the `scenePerformActionForShortcutItem` event, raised when a home
 * screen quick action targets a scene.
 *
 * Replaces the `applicationPerformActionForShortcutItemCompletionHandler` app delegate
 * callback, which UIKit no longer calls once the app adopts scenes.
 */
export interface ScenePerformActionForShortcutItemEventData extends SceneEventData {
    /**
     * The quick action the user selected.
     */
    shortcutItem: UIApplicationShortcutItem;
    /**
     * Reports back to iOS whether the action was handled. Only the first call is delivered;
     * later ones are ignored.
     *
     * Unless a legacy `applicationPerformActionForShortcutItemCompletionHandler` handler is
     * registered — in which case that handler owns the result — the action is reported as
     * unhandled as soon as the listeners return, so a listener that wants to report otherwise
     * must call this before returning.
     */
    completionHandler: (handled: boolean) => void;
}
