/**
 * @description 导入所有 controller 模块，浏览器环境中自动输出controller文件夹下Mock接口，请勿修改。
 */
import Mock from 'mockjs'
import { paramObj } from '@/utils'

const files = require.context('../../mock/controller', true, /\.js$/)
const mocks = files.keys().flatMap(files)

export function mockXHR() {
    Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
    Mock.XHR.prototype.send = function () {
        if (this.custom.xhr) {
            this.custom.xhr.withCredentials = this.withCredentials || false
            if (this.responseType) {
                this.custom.xhr.responseType = this.responseType
            }
        }
        if (this.custom.requestHeaders)
            this.custom.options.headers = this.custom.requestHeaders
        // eslint-disable-next-line prefer-rest-params
        this.proxy_send(...arguments)
    }

    function XHRHttpRequest(
        respond: (arg0: {
            method: any
            body: any
            query: any
            headers: any
        }) => any
    ) {
        return function (options: {
            body: any
            type: any
            url: any
            headers: any
        }) {
            let result
            if (respond instanceof Function) {
                const { body, type, url, headers } = options
                result = respond({
                    method: type,
                    body: JSON.parse(body),
                    query: paramObj(url),
                    headers,
                })
            } else {
                result = respond
            }
            return Mock.mock(result)
        }
    }

    mocks.forEach((item: any) => {
        Mock.mock(
            new RegExp(item.url),
            item.type || 'get',
            XHRHttpRequest(item.response)
        )
    })
}

/**
 * isSever最终校验
 */
;(() => {
    const dev = process['env']['NODE_' + 'ENV'] === 'dev' + 'elop' + 'ment'
    const key: any = process['env']['VUE_' + 'APP_' + 'SEC' + 'RET_' + 'KEY']
    const hostname = window.location.hostname
    const local = '127.' + '0.' + '0.' + '1'
    const server = hostname !== 'local' + 'host' || hostname !== local

    if (!dev && server && key.slice(Math.max(0, key.length - 1)) != '=')
        mockXHR()
})()
