/* globals chai, describe, it, beforeEach, testFrame, UITest */
/* eslint no-console: ["error", { allow: ["log", "info", "error"] }] */

/**
 * Imports
 */

/**
 * Setup
 */

/**
 * Tests
 */
describe('Zoom in, zoom out', function () {

    before('load index.html in testFrame', function(done) {
        
        if (window.testType !== 'all' && window.testType !== 'zoomInZoomOut') {
            this.skip()
        }

        done()
    })

    it('should zoom in, zoom out, zoom in, zoom out, ... for one hour', function(done) {

        this.timeout(1000 * 60 * 70)
        this.slow(1000 * 60 * 61)

        const app = testFrame.contentWindow.app3

        const scale = app._deepZoomImage3.scatter.scale
        const center = app._deepZoomImage3.scatter.center

        function test() {

            app._deepZoomImage3.scatter.scale = scale
            app._deepZoomImage3.scatter.centerAt(center)

            const fingers = fingersFromCenter(randomCenter(app.center))

            new UITest()
                .pinch(app.view, fingers.zoomIn, 1, {
                    distance: 200,
                    duration: 3
                })
                .pinch(app.view, fingers.zoomOut, 5, {
                    distance: -58,
                    duration: 2
                })
                .start()
        }

        setInterval(test, 9000)

        test()
    })
})

/**
 * Utils
 */
function randomCenter(center) {

    let x = Math.random() * 200
    if (Math.random() < .5) {
        x *= -1
    }

    let y = Math.random() * 200
    if (Math.random() < .5) {
        y *= -1
    }

    return {
        x: center.x + x,
        y: center.y + y
    }
}

function fingersFromCenter(center) {

    const finger1 = {
        x: center.x - 3,
        y: center.y
    }
    const finger2 = {
        x: center.x + 3,
        y: center.y
    }
    const finger3 = {
        x: center.x - 30,
        y: center.y
    }
    const finger4 = {
        x: center.x + 30,
        y: center.y
    }

    return {zoomIn: [finger1, finger2], zoomOut: [finger3, finger4]}
}