import { FadeAlphaTickerProps } from '../../types/ticker/FadeAlphaTickerProps.js';
import { MoveTickerProps } from '../../types/ticker/MoveTickerProps.js';
import { ZoomTickerProps } from '../../types/ticker/ZoomTickerProps.js';
import '../TickerProgrationType.js';

interface BaseTransitionProps {
    /**
     * If true, the transition will be completed before the next step.
     * For example, if the transition is a dissolve transition, the "alpha" of the texture will be 1 before the next step.
     * @default true
     */
    mustBeCompletedBeforeNextStep?: boolean;
}
interface ShowWithDissolveTransitionProps extends BaseTransitionProps, Omit<FadeAlphaTickerProps, "type" | "startOnlyIfHaveTexture"> {
}
interface ShowWithFadeTransitionProps extends BaseTransitionProps, Omit<FadeAlphaTickerProps, "type" | "startOnlyIfHaveTexture"> {
}
interface MoveInOutProps extends BaseTransitionProps, Omit<MoveTickerProps, "startOnlyIfHaveTexture" | "destination" | "isPushInOut"> {
    /**
     * The direction of the movement.
     * @default "right"
     */
    direction?: "up" | "down" | "left" | "right";
}
interface ZoomInOutProps extends BaseTransitionProps, Omit<ZoomTickerProps, "startOnlyIfHaveTexture" | "type" | "limit" | "isZoomInOut"> {
    /**
     * The direction of the zoom effect.
     * @default "right"
     */
    direction?: "up" | "down" | "left" | "right";
}
interface PushInOutProps extends BaseTransitionProps, Omit<MoveTickerProps, "startOnlyIfHaveTexture" | "destination" | "isPushInOut"> {
    /**
     * The direction of the push effect.
     * @default "right"
     */
    direction?: "up" | "down" | "left" | "right";
}

export type { MoveInOutProps, PushInOutProps, ShowWithDissolveTransitionProps, ShowWithFadeTransitionProps, ZoomInOutProps };
