/**
 * 获取 浏览器 拍照的权限
 */


/**
 * 获取浏览器权限
 * @param option
 */
function getCamera(option) {
    option.thisCancas = document.getElementById(option.canvasId);
    option.thisContext = option.thisCancas.getContext("2d");
    option.thisVideo = document.getElementById(option.videoId);
    option.thisVideo.style.display = "block";
    // 获取媒体属性，旧版本浏览器可能不支持mediaDevices，我们首先设置一个空对象
    if (navigator.mediaDevices === undefined) {
        navigator.mediaDevices = {};
    }

    var constraints = {
        audio: false,
        video: {
            width: option.videoWidth,
            height: option.videoHeight,
            transform: "scaleX(-1)",
            facingMode: "user"
        },
    };


    // 一些浏览器实现了部分mediaDevices，我们不能只分配一个对象
    // 使用getUserMedia，因为它会覆盖现有的属性。
    // 这里，如果缺少getUserMedia属性，就添加它。
    if (navigator.mediaDevices.getUserMedia === undefined) {
        navigator.mediaDevices.getUserMedia = function (constraints) {
            // 首先获取现存的getUserMedia(如果存在)
            var getUserMedia =
                navigator.webkitGetUserMedia ||
                navigator.mozGetUserMedia ||
                navigator.getUserMedia;
            // 有些浏览器不支持，会返回错误信息
            // 保持接口一致
            if (!getUserMedia) {
                //不存在则报错
                return Promise.reject(
                    new Error("getUserMedia is not implemented in this browser")
                );
            }
            // 否则，使用Promise将调用包装到旧的navigator.getUserMedia
            return new Promise(function (resolve, reject) {
                getUserMedia.call(navigator, constraints, resolve, reject);
            });
        };
    } else {
        navigator.mediaDevices
            .getUserMedia(constraints)
            .then((stream) => {
                // 旧的浏览器可能没有srcObject
                if ("srcObject" in option.thisVideo) {
                    option.thisVideo.srcObject = stream;
                } else {
                    // 避免在新的浏览器中使用它，因为它正在被弃用。
                    option.thisVideo.src = window.URL.createObjectURL(stream);
                }
                option.thisVideo.onloadedmetadata = function (e) {
                    option.thisVideo.play();
                };
            })
            .catch((err) => {
                console.log(err);
            });
    }

    return option
}

/**
 * 绘制图片
 * 返回格式为base64
 * @param option
 */
function draw(option) {
    option.thisContext.drawImage(option.thisVideo, 0, 0, option.videoWidth, option.videoHeight);
    return option.thisCancas.toDataURL("image/png");
}

export default {
    getCamera,
    draw
}