<template>
    <u-popup v-model="showPop" height="70vh" mode="bottom" border-radius="14" :closeable="true" @close="onClose"
        :safe-area-inset-bottom="true">
        <view class="bg-white spec-contain">
            <view class="spec-header flex">
                <u-image class="m-r-20" width="180rpx" height="180rpx" border-radius="10rpx" @tap="previewImage(checkedGoods.image)"
                    :src="checkedGoods.image"></u-image>
                <view class="goods-info">
                    <view class="primary flex">
                        <price :content="checkedGoods.price" main-size="46rpx" minor-size="38rpx" color="#FF2C3C">
                        </price>
                    </view>
                    <view class="sm m-t-120">
                        库存:{{stock}}件
                    </view>
                </view>
            </view>
            <!-- 规格 -->
            <view class="spec-main">
                <scroll-view style="min-height: 600rpx;" scroll-y="true">
                    <view class="spec-list">
                        <view v-for="(item, index) in specList" :key="index" class="spec">
                            <view class="flex row-between">
                                <view class="name m-b-30">{{ item.name }}</view>
                            </view>
                            <view class="flex wrap">
                                <view v-for="(specitem, index2) in item.spec_value" :key="index2"
                                    :class="'spec-item sm ' + ( specitem.checked ? 'checked' : '' )"
                                    @tap="choseSpecItem(item.id, specitem.id)">
                                    {{ specitem.value }}
                                </view>
                            </view>
                        </view>
                    </view>
                </scroll-view>
            </view>
        </view>
    </u-popup>
</template>

<script>
    export default {
        data() {
            return {
                stock: 0,//库存
                checkedGoods: {},
                specList: [],
                showPop: false,
                isSelectedAll: true, //是否全选
                selectStr: '', // 已选规格
                specListAll: [], // 是否全选
            };
        },

        components: {},
        props: {
            show: {
                type: Boolean
            },
            goods: {
                type: Object
            }
        },
        mounted() {},
        watch: {
            // 监听商品
            goods(value) {
                this.stock = value.stock
                let specList = value.goods_spec || [];
                let goodsItem = value.goods_item || [];
                specList.forEach(item => {
                    if (item.spec_value) {
                        item.spec_value.forEach((specitem, specindex) => {
                            specitem.checked = 1;
                        });
                    }
                    this.specListAll[item.id] = true
                });
                this.specList = specList
                this.checkedGoods = goodsItem.length ? goodsItem[0] : {};
            },
            // 监听规格
            specList(value) {
                const {
                    goods_item
                } = this.goods;
                let keyArr = [];
                let specArr = [];
                let specArrCM = []; // 个规格选中的id
                value.forEach(item => {
                    if (item.spec_value) {
                        item.spec_value.forEach((specitem, indexS) => {
                            if (specitem.checked) {
                                keyArr.push(specitem.id);
                                specArr.push(specitem.value)
                                specArrCM.push(specitem.id)
                            }
                            if (indexS == item.spec_value.length - 1) {
                                if (specArrCM.length == item.spec_value.length) {
                                    this.specListAll[item.id] = true
                                } else {
                                    this.specListAll[item.id] = false
                                }
                                specArrCM = []
                            }
                        });
                    }
                });
                this.selectStr = specArr.join('、')
                // hsz
                if (!keyArr.length) return;
                let key = keyArr[0];
                let index = goods_item.findIndex(item => {
                    return item.spec_value_ids == key;
                });
                if (index == -1) return;
                this.checkedGoods = goods_item[index]
                this.$emit('change', {
                    detail: goods_item[index]
                });
            },
            show(val) {
                this.showPop = val
            }
        },
        methods: {
            onClose() {
                this.$emit('close')
            },

            // 点击选中规格。
            choseSpecItem(id, specid) {
                this.specList.forEach(item => {
                    if (item.spec_value && item.id == id) {
                        item.spec_value.forEach(specitem => {
                            if (specitem.id == specid) {
                                if (specitem.checked == 1) {
                                    specitem.checked = 0;
                                } else {
                                    specitem.checked = 1;
                                }
                            }
                        });
                    }
                });
                this.specList = [...this.specList]
                this.getStock();
            },
            
            getStock() {
                let sku = [];
                // 遍历得到sku = [[1],[157,158]]数组
                this.specList.forEach((item, index) => {
                    sku.push([])
                    item.spec_value.forEach(specitem => {
                        if (specitem.checked) {
                            sku[index].push(specitem.id)
                        }
                    });
                });
                
                // 算出数组多种规格组合
                let keyArr = this.dkej(sku)
                let stock = 0
                keyArr.forEach((item) => {
                    const a = item.join(',')
                    let index = this.goods.goods_item.findIndex(item => {
                        return item.spec_value_ids == a;
                    });
                    if (index == -1) return;
                    stock += this.goods.goods_item[index].stock
                })
                this.stock = stock
            },
            
            dkej(arr) {
                let accArr = []
                for (var arrar in arr) {
                    arrar = arr[arrar]
                    let result = []
                    for (var i in arrar) {
                        if (accArr.length) {
                            for (var x in accArr) {
                                result.push(accArr[x].concat(arrar[i]))
                            }
                        } else {
                            result.push([arrar[i]])
                        }
                    }
                    accArr = result
                }
                return accArr
            },

            previewImage(current) {
                uni.previewImage({
                    current,
                    // 当前显示图片的http链接
                    urls: [current] // 需要预览的图片http链接列表
                });
            }
        }
    };
</script>
<style lang="scss" scoped>
    .spec-contain {
        border-radius: 10rpx 10rpx 0 0;
        overflow: hidden;
        position: relative;

        .close {
            position: absolute;
            right: 10rpx;
            top: 10rpx;
        }

        .spec-header {
            padding: 30rpx;
            padding-right: 70rpx;
            align-items: flex-start;
            border: $-solid-border;

            .vip-price {
                margin: 0 24rpx;
                background-color: #FFE9BA;
                line-height: 36rpx;
                border-radius: 6rpx;
                overflow: hidden;

                .price-name {
                    background-color: #101010;
                    padding: 3rpx 12rpx;
                    color: #FFD4B7;
                    position: relative;
                    overflow: hidden;

                    &::after {
                        content: '';
                        display: block;
                        width: 20rpx;
                        height: 20rpx;
                        position: absolute;
                        right: -15rpx;
                        background-color: #FFE9BA;
                        border-radius: 50%;
                        top: 50%;
                        transform: translateY(-50%);
                        box-sizing: border-box;
                    }
                }
            }
        }

        .spec-main {
            .spec-list {
                padding: 30rpx 20rpx;

                .spec-item {
                    line-height: 52rpx;
                    padding: 0 30rpx;
                    background-color: #F6F6F6;
                    border-radius: 30rpx;
                    margin: 0 20rpx 20rpx 0;
                    border: 1rpx solid #F6F6F6;

                    &.checked {
                        font-weight: 500;
                        border: 1rpx solid $-color-primary;
                        color: #fff;
                        background-color: $-color-primary;
                    }

                }
            }
        }
    }
</style>