import cache from '@/utils/cache'
import { AxiosRequestData } from '@/data/axios_request'

/**
 * 创建 localStorage 数据的 key；
 * @param {String} entTaxId 企业税号
 * @param {Number} invoiceCategory 发票种类
 * @param {String} drawers 开票人
 */
function createLocalKey(entTaxId, invoiceCategory, drawers) {
    return `${entTaxId}-${invoiceCategory}-${drawers}`
}

/**
 * 创建保存发票信息使用的对象
 */
function createObjSaveInvoice() {
    return {
        entTaxId: "", // 企业税号
        invoiceCategory: "", // 发票种类
        saveDate: new Date(), // 保存时间
        invoiceInfo: {} // 发票信息对象
    }
}

/**
 * 保存开具发票暂存信息
 * @param {String} key 唯一标识
 * @param {String} value 开票暂存的json数据
 */
function setStorage(key, value) {
    const url = '/sys/temporary/storage/save'
    let token = cache.getToken()
    let mobile = JSON.parse(cache.getSession('user')).account
    let company = JSON.parse(cache.getSession('company'))
    let entTaxId = company.entTaxId
    let args = {
        invoiceKey: key,
        invoiceValue: value,
        entTaxId: entTaxId,
        mobile: mobile,
        reqChannel: 4,
    }
    console.log('保存开具发票暂存信息 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 1)
            .then(val => {
                console.log('保存开具发票暂存信息 结果：')
                console.log(val)
                if (val.code === 0) {
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

/**
 * 获取开票暂存信息
 * @param {String} key 唯一标识
 */
function getStorage(key) {
    const url = '/sys/temporary/storage/getInvoice'
    let token = cache.getToken()
    let args = {
        key: key
    }
    console.log('获取开票暂存信息 参数：')
    console.log(args)
    return new Promise(function (resolve, reject) {
        AxiosRequestData(url, token, args, false, 2)
            .then(val => {
                console.log('获取开票暂存信息 结果：')
                console.log(val)
                if (val.code === 0) {
                    val.data = JSON.parse(val.data)
                    resolve(val)
                } else {
                    reject(val.msg)
                }
            })
    })
}

const invoice = {
    /**
     * 保存开具发票暂存信息
     * @param {String} entTaxId 企业税号
     * @param {Number} invoiceCategory 发票种类
     * @param {String} drawers 开票人
     * @param {Object} invoiceInfo 发票信息对象
     */
    saveInvoice: function (entTaxId, invoiceCategory, drawers, invoiceInfo) {
        let key = createLocalKey(entTaxId, invoiceCategory, drawers)
        let value = JSON.stringify(invoiceInfo)

        // cache.setLocal(key, value)
        return setStorage(key, value)
    },
    /**
     * 获取发票信息
     * @param {String} entTaxId 企业税号
     * @param {Number} invoiceCategory 发票种类
     * @param {String} drawers 开票人
     */
    getInvoice: function (entTaxId, invoiceCategory, drawers) {
        let key = createLocalKey(entTaxId, invoiceCategory, drawers)

        // let value = cache.getLocal(key)
        // value = JSON.parse(value)
        // return value
        return getStorage(key)
    },
    /**
     * 移除发票信息
     * @param {String} entTaxId 企业税号
     * @param {Number} invoiceCategory 发票种类
     * @param {String} drawers 开票人
     */
    removeInvoice: function (entTaxId, invoiceCategory, drawers) {
        let key = createLocalKey(entTaxId, invoiceCategory, drawers)

        // cache.removeLocal(key)
        return setStorage(key, "")
    }
}

export default invoice
