/**
 * 屏幕事件
 */
var screenEvent = {
    element: document.documentElement,
    init: function (element) {
        screenEvent.element = element;
    },
    orientationDegree: window.innerWidth < window.innerHeight ? 0 : 90,
    onWindowResize: function (event) {
        var width = window.innerWidth;
        var height = window.innerHeight;
        window.that.camera.aspect = width / height;
        window.that.camera.updateProjectionMatrix();
        window.that.renderer.setSize(width, height);
        // window.that.css2dRenderer.setSize(width, height);

        //判断设备的转置
        // if (device.isMobile()) {
        // if (width > height) {
        //     screenEvent.orientationDegree = 90;

        // } else {
        //     screenEvent.orientationDegree = 0;
        // }
        // cursor.rotate(screenEvent.orientationDegree)
        // }
    },
    /**
     * 全屏事件
     */
    fullScreen: {
        isFullScreen: false,
        enterFullScreen: function (success) {
            if (screenEvent.element.requestFullscreen) {
                screenEvent.element.requestFullscreen();
            } else if (screenEvent.element.mozRequestFullScreen) {
                screenEvent.element.mozRequestFullScreen();
            } else if (screenEvent.element.msRequestFullscreen) {
                screenEvent.element.msRequestFullscreen();
            } else if (screenEvent.element.webkitRequestFullscreen) {
                screenEvent.element.webkitRequestFullscreen();
            }
            if (!device.isMobile()) {
                window.$(document).on('fullscreenchange mozfullscreenchange webkitfullscreenchange', screenEvent.fullScreen.changeFullScreenEvent);
            }
            if (typeof (success) === "function")
                success();

        },
        exitFullScreen: function (success) {
            window.that.css2dRenderer_VRCopy.domElement.style.display = "none";
            var exitFullScreen = document.exitFullscreen || document.msExitFullscreen || document.mozCancelFullScreen || document.webkitExitFullscreen;
            if (document.exitFullscreen)
                document.exitFullscreen();
            else if (document.msExitFullscreen)
                document.msExitFullscreen();
            else if (document.mozCancelFullScreen)
                document.mozCancelFullScreen();
            else if (document.webkitExitFullscreen)
                document.webkitExitFullscreen();
            if (!device.isMobile()) {
                window.$(document).off('fullscreenchange mozfullscreenchange webkitfullscreenchange', screenEvent.fullScreen.changeFullScreenEvent);
            }
            screenEvent.autoRotate.end();
            if (typeof (success) === "function")
                success();
        },
        changeFullScreenEvent: function (event) {
            if (!screenEvent.VR.isVR && screenEvent.fullScreen.isFullScreen) {
                //非VR状态下的全屏状态。
                screenEvent.fullScreen.exitFullScreen(function () {
                    // screenEvent.autoRotate.end();
                    window.that.showInitBtns();
                })
            }
            screenEvent.fullScreen.isFullScreen = !screenEvent.fullScreen.isFullScreen;
            setTimeout(function () {
                cursor.rotate(screenEvent.orientationDegree);
            }, 50); //修复准星坐标
        },

    },
    /**
     * VR事件
     */
    VR: {
        isVR: false,
        enterVR: function (success) {
            //screenEvent.VR.isVR = true; 
            //绑定PC VR移动事件
            if (!device.isMobile()) {
                move.pcMove_VR();
                window.$(document).on('fullscreenchange mozfullscreenchange webkitfullscreenchange', screenEvent.VR.changeVREvent);
            }
            //进入全屏
            screenEvent.fullScreen.enterFullScreen();
            //退出旋转
            screenEvent.autoRotate.end();


            window.$(screenEvent.element).css("cursor", "none");
            //显示准星
            cursor.show();
            if (!device.isMobile()) {
                mouse.startLock();
            } else {
                screenEvent.VR.isVR = true;
            }
            if (typeof (success) === "function") {
                success();
            }
        },
        exitVR: function (success) {
            // screenEvent.VR.isVR = false;
            window.$(document).off('fullscreenchange mozfullscreenchange webkitfullscreenchange', screenEvent.VR.changeVREvent);
            //退出全屏
            screenEvent.fullScreen.exitFullScreen();
            //隐藏准星
            cursor.hide();
            //绑定PC 正常移动事件
            if (!device.isMobile()) {
                move.pcMove_noVR();
            }
            window.$(screenEvent.element).css("cursor", "default");
            if (!device.isMobile()) {
                mouse.endLock();
            } else {
                screenEvent.VR.isVR = false;
            }
            window.that.showInitBtns(); //恢复原始按钮
            if (typeof (success) === "function") {
                success();
            }
        },
        changeVREvent: function () {
            if (screenEvent.VR.isVR) {
                screenEvent.VR.exitVR()
            }
            screenEvent.VR.isVR = !screenEvent.VR.isVR;
        }
    },
    /**
     * 自动旋转
     */
    autoRotate: {
        rotateState: false, // 当前旋转状态
        clickState: false,
        restoreTimeoutId: undefined,
        restoreState: false,
        stopState: true, // 是否停止旋转，默认为true
        start: function () {
            screenEvent.autoRotate.rotateState = true;
            screenEvent.autoRotate.stopState = false;
            window.that.renderElement.addEventListener('mousedown', screenEvent.autoRotate.pause, false);
            window.that.renderElement.addEventListener('touchstart', screenEvent.autoRotate.pause, false);
        },
        pause: function () {
            screenEvent.autoRotate.rotateState = false;
            screenEvent.autoRotate.clickState = true;
            if (screenEvent.autoRotate.restoreTimeoutId) {
                clearTimeout(screenEvent.autoRotate.restoreTimeoutId);
            }

            screenEvent.autoRotate.restoreTimeoutId = setTimeout(function () {
                screenEvent.autoRotate.clickState = false;
                screenEvent.autoRotate.restoreTimeoutId = undefined;
            }, 5000); //PC端鼠标拖动后暂停的时间
            if (!screenEvent.autoRotate.restoreState) {
                screenEvent.autoRotate.restoreState = true; //防止重复点击
                screenEvent.autoRotate.waitForRestore();
            } else {
                screenEvent.autoRotate.restoreState = false
            }

        },
        waitForRestore: function () {
            var promise = new Promise(screenEvent.autoRotate.checkClickState);
            promise.then(function (result) {
                if (!result && !screenEvent.autoRotate.stopState) {
                    screenEvent.autoRotate.rotateState = true;
                    screenEvent.autoRotate.restoreState = false;
                } else if (result && !screenEvent.autoRotate.stopState) {
                    screenEvent.autoRotate.waitForRestore(); //如果被点击后，仍然继续查询
                }
            })
        },
        checkClickState: function (resolve) {
            setTimeout(function () {
                resolve(screenEvent.autoRotate.clickState);
            }, 2000) //等待两秒查看状态
        },
        // continue: function () {},
        end: function () {
            screenEvent.autoRotate.stopState = true;
            screenEvent.autoRotate.rotateState = false;
            if (screenEvent.autoRotate.restoreTimeoutId) {
                clearTimeout(screenEvent.autoRotate.restoreTimeoutId);
                screenEvent.autoRotate.restoreTimeoutId = undefined;
            };
        },
        rotate: function () {
            var info = Util.decryptQuaternion(window.that.camera.quaternion);
            window.that.currentMoveConfig.lon = THREE.Math.radToDeg(info.theta);
            window.that.currentMoveConfig.lat = THREE.Math.radToDeg(info.delta);
            //
            if (window.that.currentMoveConfig.lat != 0) {
                if (window.that.currentMoveConfig.lat < 0) {
                    window.that.currentMoveConfig.lat += 0.1;
                } else {
                    window.that.currentMoveConfig.lat -= 0.1;
                }
            }
            window.that.currentMoveConfig.lon -= 0.1;
            if (window.that.currentMoveConfig.lon === -360 || window.that.currentMoveConfig.lon === 360) {
                window.that.currentMoveConfig.lon = 0;
            }
            window.that.currentMoveConfig.phi = THREE.Math.degToRad(window.that.currentMoveConfig.lat);
            window.that.currentMoveConfig.theta = THREE.Math.degToRad(window.that.currentMoveConfig.lon);

            var newQuaternion = Util.encryptQuaternion(window.that.currentMoveConfig.theta, window.that.currentMoveConfig.phi);
            window.that.camera.quaternion.copy(newQuaternion);
        }
    },
    /**
     * 首次进入场景
     */
    getInFirst: {
        config: {
            isGettingIn: true,
            beginFov: 169,
            endFov: 70,
            fulltime: 4, // s
            countTime: 0, // s
            startTime: undefined
        },
        tween: new Tween(),
        render: function () {
            //firstTime
            if (screenEvent.getInFirst.config.isGettingIn && screenEvent.getInFirst.config.countTime === 0) {
                screenEvent.getInFirst.config.countTime++
                screenEvent.getInFirst.config.startTime = Date.now();

                //FOV视角
                screenEvent.getInFirst.config.endFov = window.that.camera.fov;

                //相机朝向，开始
                window.that.camera.lookAt(new THREE.Vector3(0, -1, 0));
            }
            //lastTime
            else if (screenEvent.getInFirst.config.isGettingIn && screenEvent.getInFirst.config.countTime >= screenEvent.getInFirst.config.fulltime) {
                //FOV视角
                window.that.camera.fov = screenEvent.getInFirst.config.endFov;

                //相机朝向，结束
                if (screenEvent.getInFirst.config.type === 'image') {
                    window.that.camera.lookAt(new THREE.Vector3(-1, 0, 0));
                } else {
                    window.that.camera.lookAt(new THREE.Vector3(0, 0, 1));
                }

                screenEvent.getInFirst.config.isGettingIn = false;
                //进入全景旋转
                // 目前浏览器都不支持进入网页自动全屏
                cusBtns.hideAllBtn();
                if (!device.isMobile() && !!document.querySelector("#user")) {
                    if (window.displayAvatar) {
                        document.querySelector("#user").style.display = 'block'
                    }
                }

                cusBtns.showBtn({
                    id: 'fullscreen'
                })
                cusBtns.showBtn({
                    id: 'stopRotate'
                })
                cusBtns.showBtn({
                    id: 'VR'
                })
                cusBtns.showBtn({
                    id: 'chooseRoom'
                })
                //按音乐状态隐藏音乐按钮
                if (document.querySelector('#audio') !== null) {
                    cusBtns.showBtn({
                        id: "stopMusic"
                    });
                } else {
                    cusBtns.showBtn({
                        id: "playMusic"
                    });
                }
                cusBtns.showBtn({
                    id: "share"
                })
                cusBtns.showBtn({
                    id: "info"
                })
                if (device.isMobile()) {
                    cusBtns.showBtn({
                        id: "userinfo"
                    });
                }


                screenEvent.autoRotate.start();

                //console.log(Animate.countTime);
            } else {
                screenEvent.getInFirst.config.countTime = (Date.now() - screenEvent.getInFirst.config.startTime) / 1000.0;
                //var percent = screenEvent.getInFirst.config.countTime / screenEvent.getInFirst.config.fulltime;
                var percent = screenEvent.getInFirst.tween.Cubic.easeInOut(screenEvent.getInFirst.config.countTime, 0, 2, screenEvent.getInFirst.config.fulltime) / 2
                //console.log(percent);
                //曲线变换，淡入淡出（两头慢中间快） 

                // 相机fov的曲线应该是二次曲线
                //var camPercent = ((1.2*percent - 0.2)>0? (1.2*percent - 0.2) : 0);
                //手工淡入淡出
                var camPercent = 0
                if (percent < 0.2) {
                    camPercent = 0.7 * percent;
                } else if (percent < 0.8) {
                    camPercent = 1.2 * percent - 0.1;
                } else {
                    camPercent = 0.7 * percent + 0.3;
                }
                //var camPercent = percent;
                window.that.camera.fov = screenEvent.getInFirst.config.beginFov - (screenEvent.getInFirst.config.beginFov - screenEvent.getInFirst.config.endFov) * camPercent;
                //console.log(window.that.camera.fov);

                var x = 0,
                    y = 0,
                    z = 0;
                //相机面朝方向,从向下到向前
                // x = 0;
                // y = -Math.cos(percent*Math.PI/2);
                // z = -Math.sin(percent*Math.PI/2);

                //相机面朝向从后到前
                if (screenEvent.getInFirst.config.type === 'image') {
                    x = -Math.sin(percent * 5 * Math.PI / 2);
                    z = -Math.cos(percent * 5 * Math.PI / 2);
                } else {
                    x = Math.sin(percent * Math.PI);
                    z = -Math.cos(percent * Math.PI);
                }
                //console.log("x:",x,"y:",y,",z:",z,"f:",window.that.camera.fov,",percent",percent);
                window.that.camera.lookAt(new THREE.Vector3(x, y, z));

                //相机从下往上抬头
                window.that.camera.rotateX(-(1 - percent) * Math.PI / 2);
            }
        }
    }
}