
import { store } from '@/store';
import PrinterJobs from '@/utils/bluetoothPrinter/printerjobs'
import printerUtil from '@/utils/bluetoothPrinter/printerutil.js'
import util from '@/utils/bluetoothPrinter/util.js'
import { getStorage } from '../storage';
import { timeFormatHMS } from '../tools';
/*************************************************
 * 打印机模板
 * @param {string} size 模板大小 0:小号 1:中号 2:大号
 * @return {} 蓝牙打印订单
*/
const printerTemplate = async function (data: AnyObject) {
    let tmpOrder = data.orderInfo
    let tmpSkus = data.skus
    let storeName = store.state.storeInfo.allStoreInfo.name ? store.state.storeInfo.allStoreInfo.name : '京西到家'
    let storeTel = store.state.storeInfo.allStoreInfo.tel1 ? store.state.storeInfo.allStoreInfo.tel1 : '18048531223'
    let p = new PrinterJobs()
    let size = +getStorage('printerRetrySize') || 0
    switch (size) {
        // 小号
        case 0:
            // 平台名称
            p
                .clear()
                .setSize(2, 2)
                .setAlign('ct')
                .print(`${vendorID2(tmpOrder.vendorID)}`)

                // 分割线
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 下单时间
                .setSize(1, 1)
                .setAlign('lt')
                .print(`下单时间：${timeFormatHMS(tmpOrder.orderCreatedAt)}`)

                // 预计送达时间
                .setSize(1, 1)
                .setAlign('lt')
                .print(`预计送达：${expectTime(tmpOrder)}`)

                // 客户姓名
                .setSize(1, 1)
                .setAlign('lt')
                .print(`客户姓名：${tmpOrder.consigneeName}`)

                // 客户电话
                .setSize(1, 1)
                .setAlign('lt')
                .print(`客户电话：${tmpOrder.consigneeMobile}`)

                // 订单编号
                .setSize(1, 2)
                .setAlign('lt')
                .printArrayP(30)
                .print(`订单编号:${tmpOrder.vendorOrderID}`)

                // 订单序号
                .setSize(2, 2)
                .setBold(true)
                .setAlign('ct')
                .printArrayP(30)
                .print(`${vendorID2(tmpOrder.vendorID)}#${tmpOrder.orderSeq}`)

            // 条形码
            if (tmpOrder.vendorOrderID.length < 18 && !getStorage('printerCompatible')) {
                p
                    .printQrFormat(tmpOrder.vendorOrderID)
                    .print(tmpOrder.vendorOrderID)
            }

            // 饿佰取货码
            if (tmpOrder.vendorID === 3) {
                p
                    .setSize(1, 2)
                    .setAlign('ct')
                    .printArrayP(30)
                    .print(`淘宝闪购取货码: ${tmpOrder.vendorOrderID2.slice(tmpOrder.vendorOrderID2.length - 4)}`)
            }

            // 分割线
            p
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 客户地址
                .setSize(1, 2)
                .setAlign('lt')
                .print(`客户地址：${tmpOrder.consigneeAddress}`)

                // 分割线
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 客户备注
                .setSize(1, 2)
                .setAlign('lt')
                .print(`客户备注：${tmpOrder.buyerComment}`)

                // 分割线
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 商品列表
                .setSize(1, 1)
                .setAlign('lt')
                .print('商品列表')
            if (!getStorage('printerGoodsMoney')) {
                // 打印
                p
                    .print('品名        数量           单价')
                    .print(printerUtil.fillLine())
                tmpSkus.forEach((item: any, index: number) => {
                    console.log('ZSW-item', item);
                    let comparePrice = item.vendorPrice / 100
                    p.print(`${index + 1}.${item.skuName}`)
                    p.print(util.goodsGandle('', `x${item.count}`, `￥${(comparePrice * 1).toFixed(2)}`))

                    // 蓝牙打印机地方设置打印 upc
                    if (getStorage('isPrinterUpc') && item.upc) {
                        p.print(`UPC: ${item.upc}`)
                    }

                    p.print(printerUtil.fillLine())
                })
            } else {
                // 不打印
                p
                    .print('品名                      数量')
                    .print(printerUtil.fillLine())
                tmpSkus.forEach((item: any, index: number) => {
                    p.print(`${index + 1}.${item.skuName}`)
                    p.print(util.goodsGandle('', '', `x${item.count}`))

                    // 蓝牙打印机地方设置打印 upc
                    if (getStorage('isPrinterUpc') && item.upc) {
                        p.print(`UPC: ${item.upc}`)
                    }

                    p.print(printerUtil.fillLine())
                })
            }

            p
                .print(`共${tmpOrder.skuCount}种${tmpOrder.goodsCount}件商品`)
            if (!getStorage('printerGoodsMoney')) {
                p
                    .print(`实付金额: ￥${(tmpOrder.actualPayPrice / 100).toFixed(2)}`)
            }

            // 分割线
            p
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 商品质量问题
                .setSize(1, 2)
                .setAlign('ct')
                .print('商品质量问题')
                .print(storeTel)
                .println(storeName)

            // 兼容模式条形码
            if (tmpOrder.vendorOrderID.length < 18 && getStorage('printerCompatible')) {
                p
                    .setSize(1, 1)
                    .setAlign('ct')
                    .print(`#${tmpOrder.orderSeq}号兼容模式条形码`)
                    .printQrFormat(tmpOrder.vendorOrderID)
                    .print(tmpOrder.vendorOrderID)
                    .println()
                    .println()
            } else {
                p
                    // 结束
                    .setSize(1, 1)
                    .print(printerUtil.fillAround(`#${tmpOrder.orderSeq}完`))
                    .println()
                    .println()
            }
            break
        // 中号
        case 1:
            // 平台名称
            p
                .clear()
                .setSize(2, 2)
                .setAlign('ct')
                .print(`${vendorID2(tmpOrder.vendorID)}`)

                // 分割线
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 下单时间
                .setSize(1, 1)
                .setAlign('lt')
                .print(`下单时间：${timeFormatHMS(tmpOrder.orderCreatedAt)}`)

                // 预计送达时间
                .setSize(1, 1)
                .setAlign('lt')
                .print(`预计送达：${expectTime(tmpOrder)}`)

                // 客户姓名
                .setSize(1, 1)
                .setAlign('lt')
                .print(`客户姓名：${tmpOrder.consigneeName}`)

                // 客户电话
                .setSize(1, 1)
                .setAlign('lt')
                .print(`客户电话：${tmpOrder.consigneeMobile}`)

                // 订单编号
                .setSize(1, 2)
                .setAlign('lt')
                .printArrayP(30)
                .print(`订单编号:${tmpOrder.vendorOrderID}`)

                // 订单序号
                .setSize(2, 2)
                .setBold(true)
                .setAlign('ct')
                .printArrayP(30)
                .print(`${vendorID2(tmpOrder.vendorID)}#${tmpOrder.orderSeq}`)

            // 条形码
            if (tmpOrder.vendorOrderID.length < 18 && !getStorage('printerCompatible')) {
                p
                    .printQrFormat(tmpOrder.vendorOrderID)
                    .print(tmpOrder.vendorOrderID)
            }

            // 饿佰取货码
            if (tmpOrder.vendorID === 3) {
                p
                    .setSize(1, 2)
                    .setAlign('ct')
                    .printArrayP(30)
                    .print(`淘宝闪购取货码: ${tmpOrder.vendorOrderID2.slice(tmpOrder.vendorOrderID2.length - 4)}`)
            }

            // 分割线
            p
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 客户地址
                .setSize(1, 2)
                .setAlign('lt')
                .setBold(true)
                .print(`客户地址：${tmpOrder.consigneeAddress}`)

                // 分割线
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 客户备注
                .setSize(1, 2)
                .setAlign('lt')
                .setBold(true)
                .print(`客户备注：${tmpOrder.buyerComment}`)

                // 分割线
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 商品列表
                .setSize(1, 1)
                .setAlign('lt')
                .setBold(true)
                .print('商品列表')
            if (!getStorage('printerGoodsMoney')) {
                p
                    .print('品名        数量           单价')
                    .setSize(1, 1)
                    .print(printerUtil.fillLine())
                    .setSize(1, 1)
                    .setBold(true)
                tmpSkus.forEach((item: any, index: number) => {
                    let comparePrice = item.vendorPrice / 100
                    p.print(`${index + 1}.${item.skuName}`)
                    p.print(util.goodsGandle('', `x${item.count}`, `￥${(comparePrice * 1).toFixed(2)}`))

                    // 蓝牙打印机地方设置打印 upc
                    if (getStorage('isPrinterUpc') && item.upc) {
                        p.print(`UPC: ${item.upc}`)
                    }

                    p.print(printerUtil.fillLine())
                })
            } else {
                p
                    .print('品名                      数量')
                    .setSize(1, 1)
                    .print(printerUtil.fillLine())
                    .setSize(1, 1)
                    .setBold(true)
                tmpSkus.forEach((item: any, index: number) => {
                    p.print(`${index + 1}.${item.skuName}`)
                    p.print(util.goodsGandle('', '', `x${item.count}`))

                    // 蓝牙打印机地方设置打印 upc
                    if (getStorage('isPrinterUpc') && item.upc) {
                        p.print(`UPC: ${item.upc}`)
                    }

                    p.print(printerUtil.fillLine())
                })
            }


            p
                .setSize(1, 1)
                .setBold(true)
                .print(`共${tmpOrder.skuCount}种${tmpOrder.goodsCount}件商品`)
            if (!getStorage('printerGoodsMoney')) {
                p
                    .print(`实付金额: ￥${(tmpOrder.actualPayPrice / 100).toFixed(2)}`)
            }

            // 分割线
            p
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 商品质量问题
                .setSize(1, 2)
                .setAlign('ct')
                .setBold(true)
                .print('商品质量问题')
                .print(storeTel)
                .println(storeName)

            // 兼容模式条形码
            if (tmpOrder.vendorOrderID.length < 18 && getStorage('printerCompatible')) {
                p
                    .setSize(1, 1)
                    .setAlign('ct')
                    .print(`#${tmpOrder.orderSeq}号兼容模式条形码`)
                    .printQrFormat(tmpOrder.vendorOrderID)
                    .print(tmpOrder.vendorOrderID)
                    .println()
                    .println()
            } else {
                p
                    // 结束
                    .setSize(1, 1)
                    .print(printerUtil.fillAround(`#${tmpOrder.orderSeq}完`))
                    .println()
                    .println()
            }
            break
        // 大号
        case 2:
            // 平台名称
            p
                .clear()
                .setSize(2, 2)
                .setAlign('ct')
                .print(`${vendorID2(tmpOrder.vendorID)}`)

                // 分割线
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 下单时间
                .setSize(1, 1)
                .setAlign('lt')
                .setBold(true)
                .print(`下单时间：${timeFormatHMS(tmpOrder.orderCreatedAt)}`)

                // 预计送达时间
                .setSize(1, 1)
                .setAlign('lt')
                .setBold(true)
                .print(`预计送达：${expectTime(tmpOrder)}`)

                // 预计送达时间
                .setSize(1, 1)
                .setAlign('lt')
                .setBold(true)
                .print(`客户姓名：${tmpOrder.consigneeName}`)

                // 预计送达时间
                .setSize(1, 1)
                .setAlign('lt')
                .setBold(true)
                .print(`客户电话：${tmpOrder.consigneeMobile}`)

                // 订单编号
                .setSize(1, 2)
                .setAlign('lt')
                .setBold(true)
                .printArrayP(30)
                .print(`订单编号:${tmpOrder.vendorOrderID}`)

                // 订单序号
                .setSize(2, 2)
                .setBold(true)
                .setAlign('ct')
                .printArrayP(30)
                .print(`${vendorID2(tmpOrder.vendorID)}#${tmpOrder.orderSeq}`)

            // 条形码
            if (tmpOrder.vendorOrderID.length < 18 && !getStorage('printerCompatible')) {
                p
                    .printQrFormat(tmpOrder.vendorOrderID)
                    .print(tmpOrder.vendorOrderID)
            }

            // 饿佰取货码
            if (tmpOrder.vendorID === 3) {
                p
                    .setSize(1, 2)
                    .setAlign('ct')
                    .setBold(true)
                    .printArrayP(30)
                    .print(`淘宝闪购取货码: ${tmpOrder.vendorOrderID2.slice(tmpOrder.vendorOrderID2.length - 4)}`)
            }

            // 分割线
            p
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 客户地址
                .setSize(2, 2)
                .setAlign('lt')
                .setBold(true)
                .print(`客户地址：${tmpOrder.consigneeAddress}`)

                // 分割线
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 客户备注
                .setSize(2, 2)
                .setAlign('lt')
                .setBold(true)
                .print(`客户备注：${tmpOrder.buyerComment}`)

                // 分割线
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 商品列表
                .setSize(1, 2)
                .setAlign('lt')
                .setBold(true)
                .print('商品列表')
            if (!getStorage('printerGoodsMoney')) {
                p
                    .print('品名        数量           单价')
                    .setSize(1, 2)
                    .print(printerUtil.fillLine())
                    .setSize(1, 2)
                    .setBold(true)
                tmpSkus.forEach((item: any, index: number) => {
                    let comparePrice = item.vendorPrice / 100
                    p.print(`${index + 1}.${item.skuName}`)
                    p.print(util.goodsGandle('', `x${item.count}`, `￥${(comparePrice * 1).toFixed(2)}`))

                    // 蓝牙打印机地方设置打印 upc
                    if (getStorage('isPrinterUpc') && item.upc) {
                        p.print(`UPC: ${item.upc}`)
                    }

                    p.print(printerUtil.fillLine())
                })
            } else {
                p
                    .print('品名                      数量')
                    .setSize(1, 2)
                    .print(printerUtil.fillLine())
                    .setSize(1, 2)
                    .setBold(true)
                tmpSkus.forEach((item: any, index: number) => {
                    p.print(`${index + 1}.${item.skuName}`)
                    p.print(util.goodsGandle('', '', `x${item.count}`))

                    // 蓝牙打印机地方设置打印 upc
                    if (getStorage('isPrinterUpc') && item.upc) {
                        p.print(`UPC: ${item.upc}`)
                    }

                    p.print(printerUtil.fillLine())
                })
            }

            p
                .setSize(2, 2)
                .setBold(true)
                .print(`共${tmpOrder.skuCount}种${tmpOrder.goodsCount}件商品`)
            if (!getStorage('printerGoodsMoney')) {
                p
                    .print(`实付:￥${(tmpOrder.actualPayPrice / 100).toFixed(2)}`)
            }

            // 分割线
            p
                .setSize(1, 1)
                .print(printerUtil.fillLine())

                // 商品质量问题
                .setSize(2, 2)
                .setAlign('ct')
                .setBold(true)
                .print('商品质量问题')
                .print(storeTel)
                .println(storeName)

            // 兼容模式条形码
            if (tmpOrder.vendorOrderID.length < 18 && getStorage('printerCompatible')) {
                p
                    .setSize(1, 1)
                    .setAlign('ct')
                    .print(`#${tmpOrder.orderSeq}号兼容模式条形码`)
                    .printQrFormat(tmpOrder.vendorOrderID)
                    .print(tmpOrder.vendorOrderID)
                    .println()
                    .println()
            } else {
                p
                    // 结束
                    .setSize(1, 1)
                    .print(printerUtil.fillAround(`#${tmpOrder.orderSeq}完`))
                    .println()
                    .println()
            }
            break
        // 开发者模板
        case 3:
            p
                .clear()
                // 开始
                .setSize(2, 2)
                .setAlign('ct')
                .print(`${vendorID2(tmpOrder.vendorID)}`)

                // 分割线
                .setSize(1, 1)
                .print(printerUtil.fillAround(`#${tmpOrder.orderSeq}`))
                .println()

                // 订单序号
                .setSize(2, 2)
                .setBold(true)
                .setAlign('ct')
                .print(`${vendorID2(tmpOrder.vendorID)}#${tmpOrder.orderSeq}`)

            // 条形码
            if (tmpOrder.vendorOrderID.length < 18 && !getStorage('printerCompatible')) {
                p
                    .printQrFormat(tmpOrder.vendorOrderID)
                    .print(tmpOrder.vendorOrderID)
            }

            // 兼容模式条形码
            if (tmpOrder.vendorOrderID.length < 18 && getStorage('printerCompatible')) {
                p
                    .setSize(1, 1)
                    .setAlign('ct')
                    .print(`#${tmpOrder.orderSeq}号兼容模式条形码`)
                    .printQrFormat(tmpOrder.vendorOrderID)
                    .print(tmpOrder.vendorOrderID)
                    .println()
                    .println()
            } else {
                p
                    // 结束
                    .setSize(1, 1)
                    .print(printerUtil.fillAround(`#${tmpOrder.orderSeq}完`))
                    .println()
                    .println()
            }
            break
    }

    let buffer = await p.buffer()
    return buffer
}

// 处理平台名字
function vendorID2(vendorID: number) {
    switch (vendorID) {
        case 0:
            return '京东到家'
        case 1:
            return '美团外卖'
        // case 2:
        //     return '淘宝闪购'
        case 3:
            return '淘宝闪购新零售'
        case 5:
            return '京东商城'
        case 9:
            return '京西到家'
        case 11:
            return '微盟'
        case 14:
            return '抖音小时购'
        // case 16:
        //     return '淘鲜达'
        default:
            return '未知平台'
    }
}

// 无预计送达时间的情况
function expectTime(tmpOrder: AnyObject) {
    let timer
    try {
        if (!tmpOrder.expectedDeliveredTime || tmpOrder.expectedDeliveredTime.indexOf('1970') !== -1) {
            timer = new Date(new Date(tmpOrder.orderCreatedAt).getTime() + 60 * 60 * 1000)
        } else {
            timer = new Date(tmpOrder.expectedDeliveredTime)
        }
        return timeFormatHMS(+timer)
    } catch (e) {
        return 'YYYY-MM-DD hh:mm:ss'
    }
}

export default printerTemplate