import { ViewportOption, StabilizationPluginOptions } from '@argos-ci/browser';

type ArgosScreenshotOptions = Partial<Cypress.Loggable & Cypress.Timeoutable & Cypress.ScreenshotOptions> & {
    /**
     * Viewports to take screenshots of.
     */
    viewports?: ViewportOption[];
    /**
     * Custom CSS evaluated during the screenshot process.
     */
    argosCSS?: string;
    /**
     * Sensitivity threshold between 0 and 1.
     * The higher the threshold, the less sensitive the diff will be.
     * @default 0.5
     */
    threshold?: number;
    /**
     * Wait for the UI to stabilize before taking the screenshot.
     * Set to `false` to disable stabilization.
     * Pass an object to customize the stabilization.
     * @default true
     */
    stabilize?: boolean | StabilizationPluginOptions;
};
declare global {
    namespace Cypress {
        interface Chainable {
            /**
             * Stabilize the UI and takes a screenshot of the application under test.
             *
             * @see https://argos-ci.com/docs/cypress#api-overview
             * @example
             *    cy.argosScreenshot("my-screenshot")
             *    cy.get(".post").argosScreenshot()
             */
            argosScreenshot: (
            /**
             * Name of the screenshot. Must be unique.
             */
            name: string, 
            /**
             * Options for the screenshot.
             */
            options?: ArgosScreenshotOptions) => Chainable<null>;
        }
    }
}
