<template>
    <view class="book-audit">
        <view class="bg-white flex flex-a-c" style="padding: 20rpx;border-radius: 10rpx;">
            <image :src="detail.cover" mode="aspectFill" style="width: 80px;height: 100px;"></image>
            <view class="flex flex-d flex-1 ml-20">
                <text class="common-title mb-20">{{ detail.bookName }}</text>
                <text class="text-sm">ISBN: <text class="color-primary">{{ detail.isbn }}</text> </text>
                <text class="text-sm mt-6">作者: <text>{{ detail.author }}</text> </text>
                <text class="text-sm mt-6">出版社: <text>{{ detail.publish }}</text> </text>
            </view>
        </view>

        <view class="mt-20 bg-white price-info" style="border-radius: 10rpx;">
            <view class="flex">
                <view class="flex flex-a-c flex-1">
                    <text class="label">定价</text>
                    <text class="content">{{ detail.price }}</text>
                </view>
                <view class="flex flex-a-c flex-1">
                    <text class="label">回收折扣</text>
                    <text class="content">{{ detail.recycleDiscount }}</text>
                </view>
            </view>
            <view class="flex flex-a-c">
                <view class="flex flex-a-c flex-1">
                    <text class="label">预估金额</text>
                    <text class="content">{{ detail.price }}</text>
                </view>
                <view class="flex flex-a-c flex-1">
                    <text class="label">审核金额</text>
                    <text class="content">{{ '0.00' }}</text>
                </view>
            </view>
        </view>

        <view class="mt-20">
            <u-subsection :list="list" mode="subsection" :current="current"
                @change="handleSectionChange"></u-subsection>
            <AuditInfo v-if="current == 0" :detail="auditBook" @selected="handleAuditSelected" />
            <FileInfo v-if="current == 2" :orderId="orderId" :annexType="2" :isbn="auditBook.isbn" />
        </view>

        <view class="fixed-bottom">
            <u-button type="warning" size="large" @click="handleScanCode">扫码</u-button>
            <u-button type="primary" size="large" @click="handleAudit">确定</u-button>
        </view>
    </view>
</template>

<script setup>
import { ref } from 'vue'
import { onLoad, onShow } from '@dcloudio/uni-app'
import AuditInfo from './components/AuditInfo.vue'
import FileInfo from './components/FileInfo.vue'

const detail = ref({})

// 获取图书详情 /app/book/getSimpleBookInfoByIsbn/{isbn} 
const getBookInfo = (isbn) => {
    uni.$u.http.get(`/app/book/getBookByIsbn/${isbn}`).then(res => {
        if (res.code == 200) {
            detail.value = res.data
        }
    })
}
const list = ref(['图书审核', '绑码', '附件信息'])
const current = ref(0)
const handleSectionChange = (index) => {
    current.value = index
}

//图书审核
const auditData = ref([])
const handleAuditSelected = (data) => {
    auditData.value = data
}

//存储已经扫码的图书
const scannedBooks = ref([])
//isbn正则校验是否符合
function checkIsbn(isbn) {
    let reg = /(?:[0-9]+\-?){9}[0-9X]|(?:978|979)\-?(?:[0-9]+\-?){10}/
    if (reg.test(isbn)) {
        return true
    }
    return false
}
//扫码之后的逻辑
function handleScan(isbn) {
    if (!checkIsbn(isbn)) {
        let text = `不是正确的ISBN码`
        uni.$u.ttsModule.speak(text)
        return
    }

    let isbns = orderDetail.value.detailVoList.map(item => item.isbn)
    //订单总数本
    let totalNum = orderDetail.value.totalNum

    if (isbns.includes(isbn)) {
        let book = orderDetail.value.detailVoList.find(item => item.isbn == isbn)
        if (book.num == book.auditCommentList?.length) {
            let text = ''
            if (book.auditCommentList.every(item => item.sts == 1)) {
                text = `${isbn}已审核为良好`
                uni.$u.ttsModule.speak(text)
                return
            } else {
                text = `${isbn}已审核为极差`
                scannedBooks.value.push(isbn)
                uni.$u.ttsModule.speak(text)
                uni.setStorageSync('scannedBooks', scannedBooks.value)
                uni.navigateTo({
                    url: `/pages/index/detail/batch-audit?orderId=${orderId.value}`
                })
            }
        } else {
            //已审核数量
            let hasAuditNum = book.auditCommentList?.length || 0
            //未审核数量
            let notAuditNum = book.num - hasAuditNum
            //极差数量
            let poorNum = book.auditCommentList?.filter(item => item.sts == 3).length || 0
            //已扫描书籍中当前isbn的数量
            let scannedNum = scannedBooks.value.filter(item => item == isbn).length || 0

            if (scannedNum >= notAuditNum + poorNum) {
                let text = `${isbn}已超出订单中的数量`
                return uni.$u.ttsModule.speak(text)
            } else {
                //扫描到套装书
                if (book.suit == 1) {
                    let text = `${isbn}请注意套装书是否齐全`
                    uni.$u.ttsModule.speak(text)
                }
                //扫描到需要取出的书
                if (book.bookWarn == 1) {
                    let text = `请注意${isbn}需要取出`
                    uni.$u.ttsModule.speak(text)
                }
                if (scannedNum >= notAuditNum && scannedNum < notAuditNum + poorNum) {
                    let text = `${isbn}已审核为极差`
                    uni.$u.ttsModule.speak(text)
                }

                scannedBooks.value.push(isbn)
                console.log(scannedBooks.value, 'book-audit')
                uni.setStorageSync('scannedBooks', scannedBooks.value)
                uni.navigateTo({
                    url: `/pages/index/detail/batch-audit?orderId=${orderId.value}`
                })
            }
        }


    } else {
        let text = `此订单中不存在${isbn}这本书 `
        uni.$u.ttsModule.speak(text)
    }
}

//扫码
function handleScanCode() {
    uni.scanCode({
        success: (res) => {
            handleScan(res.result)
        },
    })
}

//审核 /app/orderinfo/checkOrder
const handleAudit = () => {

    let sts = auditData.value?.[0]?.sts || 0
    if (sts == 0) {
        uni.$u.toast('请选择品相')
        uni.$u.ttsModule.speak('请选择品相')
        return
    }

    let checkUserInfo = uni.getStorageSync('checkUserInfo')
    if (checkUserInfo.userId) {
        checkUserId.value = checkUserInfo.userId
    } else {
        uni.$u.toast('请先选择审核人')
    }

    uni.$u.http.post('/app/orderinfo/checkOrder', {
        "checkUserId": checkUserId.value,
        "orderId": orderId.value,
        "checkList": auditData.value
    }).then(res => {
        if (res.code == 200) {
            uni.showToast({ title: '审核成功', icon: 'none' })
            uni.$u.ttsModule.speak('审核成功')
            uni.navigateBack()
        } else {
            uni.$u.toast(res.msg)
        }
    })
}

const auditBook = ref({})
const checkUserId = ref()
const orderId = ref()
const orderDetail = ref({})

onLoad((options) => {
    options.isbn && getBookInfo(options.isbn)
    scannedBooks.value = [options.isbn] //现存已扫描的图书，是否需要跳转批量审核
    auditBook.value = uni.getStorageSync('auditBook')
    orderId.value = options.orderId
    orderDetail.value = uni.getStorageSync('orderDetail')

    // #ifdef APP-PLUS
    uni.$u.useGlobalEvent((e) => {
        if (e.barcode) {
            handleScan(e.barcode)
        }
    })
    // #endif
})
onShow(() => {
    checkUserId.value = uni.getStorageSync('userInfo')?.userId
})
</script>


<style lang="scss" scoped>
.book-audit {
    padding: 20rpx;
    box-sizing: border-box;
    padding-bottom: 140rpx;

    .price-info {
        border-radius: 10rpx;

        .label {
            width: 150rpx;
            background-color: #cecece;
            padding: 16rpx 10rpx;
            text-align: center;
            border: 1rpx solid #e6e6e6;
        }

        .content {
            flex: 1;
            text-align: center;
            padding: 16rpx 10rpx;
            border: 1rpx solid #e6e6e6;
        }
    }
}
</style>