export class CodeUtil {

    codeType = []

    constructor(codeType) {
        if (!Array.isArray(codeType)) {
            console.error('codeType should be an array')
            return
        }
        this.codeType = codeType
    }

    scan(options = {}) {
        return uni.scanCode(options)
    }

    async getCodeInfo(options) {
        const { scanType, result } = await this.scan(options)
        return this.parseCode(result)
    }

    makeCode(type, content) {
        const t = this.codeType.indexOf(type)

        if (t == -1) {
            console.error(`codeType ${type} is undefined`, this.codeType)
            return null
        }

        return JSON.stringify({
            t,
            c: content
        })
    }

    parseCode(codeInfo) {
        try {
            const info = JSON.parse(codeInfo)
            
            const { t, c } = info
            
            const type = this.codeType[t]

            if (type) return { type, content: c }

            return { type: 'unknown', content: info }

        } catch (err) {

            console.error('parseCode error', err)

            return { type: 'error', content: codeInfo }
        }
    }
}

export const codeUtil = new CodeUtil([])