import { View } from '@tarojs/components'
import React, { useCallback, memo, useEffect, useMemo, useRef, useState } from 'react'
import Search from '@/components/search'
import styles from "./index.module.scss"
import classnames from "classnames";
import Empty from './components/empty'
import Taro, { useDidShow } from '@tarojs/taro';
import Goods from './components/goods'
import { mpproductlist } from "@/api/search"
import { debounce } from "@/common/util";
import ShopCart from '@/components/shoppingCart'
import {
    mpproductcolorlist,
    mpshoppingCartproductColorlist,
    mpsearchHistorylist,
    mpsearchHistory
} from "@/api/order"
import { getFilterData } from '@/common/util'
import { ClientListApi } from '@/api/order'

export default memo(() => {


    useEffect(() => {
        getClient()
    }, [])

    const [clientObj, setclientObj] = useState({
        clientId: -1,
        clientName: ''
    })

    //获取客户
    const [clienList, setclienList] = useState<any[]>([])
    const { fetchData: listFetchData } = ClientListApi()
    const getClient = async () => {
        const res = await listFetchData({
            page: 1, size: 10
        })
        setclientObj({
            clientId: res.data.list.length > 0 ? res.data.list[0]?.id : -1,
            clientName: res.data.list.length > 0 ? res.data.list[0]?.name : '',
        })
        setclienList([...res.data.list])
    }

    useDidShow(() => {
        //获取选择的客户
        let pages = Taro.getCurrentPages();
        let currPage = pages[pages.length - 1]; // 获取当前页面
        //判断是否有跳转选择客户
        if (currPage.data?.clientId && currPage.data?.clientId !== '') {
            setclientObj({
                clientId: currPage.data?.clientId,
                clientName: currPage.data?.clientName,
            })
        }
        //默认客户
        if (currPage.data?.clientId == null) {
            setclientObj({
                clientId: clienList.length > 0 ? clienList[0]?.id : - 1,
                clientName: clienList.length > 0 ? clienList[0]?.name : '',
            })
        }
    })


    //选择的类型
    const [typeList, setTypeList] = useState<any[]>([{ id: 0, name: '大货', checked: true }, { id: 1, name: '剪版', checked: false }, { id: 2, name: '散剪', checked: false }])
    const [goodList, setGoodlist] = useState<any[]>([])
    const onj = JSON.parse(Taro.getStorageSync('userInfo'))
    const [search, setSearchObj] = useState({
        modeId: 0,
        goodsId: null,
        code_or_name: '',
        physical_warehouse: onj.physical_warehouse
    })
    const [showShopCart, setShowShopCart] = useState(false)


    //监听选择的类型
    useEffect(() => {
        setSearchObj(search)
        if (search.goodsId) getGoodList()
    }, [search])


    //获取商品
    const { fetchData: colorlistFetch } = mpproductcolorlist()
    const getGoodList = async () => {
        const res = await colorlistFetch({ product_id: search.goodsId, sale_mode: search.modeId, code_or_name: search.code_or_name, physical_warehouse: 1 })
        res.data.list.map((item) => {
            item.showInput = false
            if (search.modeId == 0) {
                item.nums = 1
                item.buyNums = 1
            }
            if (search.modeId == 1) {
                item.nums = 0.5
                item.buyNums = 0.5
            }
            if (search.modeId == 2) {
                item.nums = 3
                item.buyNums = 3
            }
            return item
        })
        setGoodlist([...res.data.list])
    }

    //加入购物车
    const { fetchData: preViewFetch, } = mpshoppingCartproductColorlist()
    const handSure = async () => {
        const arr = goodList.filter(item => {
            return item.showInput
        })
        const list: any[] = []
        arr.forEach(it => {
            list.push({
                roll: search.modeId === 0 ? it.nums : 0,
                length: search.modeId !== 0 ? it.nums * 100 : 0,
                product_color_id: Number(it.id)
            })
        })
        const query = {
            purchaser_id: clientObj.clientId,
            sale_mode: search.modeId,
            color_list: list,
            sale_offect: 0
        }
        let res = await preViewFetch(getFilterData(query))
        Taro.showLoading({
            mask: true,
            title: '请稍等...'
        })
        if (res.data) {
            Taro.showToast({
                title: "加入成功",
                duration: 2000,
            });
            setShowShopCart(false)
            goodList.map(item => {
                item.showInput = false
                return item
            })
            setGoodlist([...goodList])
            console.log(search, '000000.0.0.')
            Taro.hideLoading()
        } else {
            Taro.hideLoading()
            Taro.showToast({
                title: res.msg,
                duration: 2000,
            });
        }
    }

    //点击输入框的加
    const handPlus = useCallback((item) => {
        goodList.map((it) => {
            if (item.id === it.id) {
                // if (it.nums > item.buyNums) {
                it.nums++
                // }
            }
            return item
        })
        setGoodlist([...goodList])
    }, [goodList])


    //输入了搜索关键字
    const getSearchDataInput = useCallback((eq) => {
        setSearchObj((e) => ({ ...e, code_or_name: eq }))
    }, [])

    const [goodObj, setGoodsobj] = useState({})
    //点击对应商品显示购物车
    const showCart = async (item) => {
        setSearchObj((e) => ({ ...e, goodsId: item.id }))
        setShowShopCart(true)
        setGoodsobj(item)
    }

    //点击加展示输入框
    const handAdd = useCallback((item) => {
        goodList.map((it) => {
            if (item.id === it.id) {
                it.showInput = true
            }
            return item
        })
        setGoodlist([...goodList])
    }, [goodList])


    //点击减
    const reduceNums = useCallback((item) => {
        goodList.map((it) => {
            if (item.id === it.id) {
                item.nums--
                if (search.modeId == 0) {
                    if (item.nums < 1) it.showInput = false, it.nums = 1
                }
                if (search.modeId == 1) {
                    if (item.nums < 0.5) it.showInput = false, it.nums = 0.5
                }
                if (search.modeId == 2) {
                    if (item.nums < 3) it.showInput = false, it.nums = 3
                }

            }
            return item
        })
        setGoodlist([...goodList])
    }, [goodList])

    //选择类型
    const handCheckMode = (item) => {
        typeList.map(it => {
            if (it.id === item.id) {
                it.checked = true
                setSearchObj((e) => ({ ...e, modeId: it.id }))
            } else {
                it.checked = false
            }
            return it
        })
        setTypeList([...typeList])
        setGoodlist([])
    }

    //关闭弹窗
    const closePoup = () => {
        setShowShopCart(false)
    }

    //获取关键字数据
    const [histroyList, setHistroyList] = useState<any[]>([])
    const { fetchData: historyFetch } = mpsearchHistorylist()
    const getHistory = async () => {
        Taro.showLoading({
            title: '加载中...',
            mask: true
        })
        const res = await historyFetch()
        if (res.data) {
            setHistroyList([...res?.data?.list])
            Taro.hideLoading()
        }
    }

    //搜索商品的数组
    const [searchList, setSearchList] = useState<any[]>([])
    //是否有值输入框
    const [hasFonts, setHasFonts] = useState(false)
    useEffect(() => {
        getHistory()
    }, [])
    //输入了搜索关键字
    const getSearchData = useCallback((e) => {
        if (e) {
            setHasFonts(true)
            getProduct(e)
        } else {
            setHasFonts(false)
            setSearchList([])
        }
    }, [])
    //搜索获取商品数据
    const { fetchData: productFetch } = mpproductlist()
    const { fetchData: historyputFetch } = mpsearchHistory()
    const getProduct = debounce(async (e) => {
        Taro.showLoading({
            title: '加载中...',
            mask: true
        })
        await historyputFetch({ key: e, scene: 0 }).then((res) => {
            if (res.data) {
                getHistory()
            }
        })
        productFetch({ code_or_name: e }).then((res) => {
            if (res.data) {
                Taro.hideLoading()
                setSearchList([...res?.data?.list])
            }
        })
    }, 300)
    //返回
    const back = () => {
        Taro.navigateBack({
            delta: 1
        })
    }

    //输入框失焦
    const onBlur = (e, id) => {
        goodList.map(item => {
            if (item.id == id) {
                if (search.modeId == 0 && (e.detail.value == '' || Number(e.detail.value) == 0)) {
                    item.showInput = false
                    item.nums = 1

                } else if (search.modeId == 0 && (e.detail.value != '' || Number(e.detail.value) > 0)) {
                    item.nums = e.detail.value
                }
                if (search.modeId == 1 && Number(e.detail.value) < 0.5) {
                    item.nums = 0.5
                    item.showInput = false
                } else if (search.modeId == 1 && Number(e.detail.value) >= 0.5) {
                    item.nums = e.detail.value
                }
                if (search.modeId == 2 && Number(e.detail.value) < 3) {
                    item.nums = 3
                    item.showInput = false

                } else if (search.modeId == 2 && Number(e.detail.value) >= 3) {
                    item.nums = e.detail.value
                }

            }
            return item
        })
        setGoodlist([...goodList])
    }

    //选择中后的值到输入框
    const [defaultvalue, setdefaultvalue] = useState('')

    //点击关键字搜索内容
    const handItem = (item) => {
        Taro.showLoading({
            title: '加载中...',
            mask: true
        })
        productFetch({ code_or_name: item.search_key }).then((res) => {
            if (res.data) {
                setHasFonts(true)
                setSearchList([...res.data.list])
                Taro.hideLoading()
            }
        })
        setdefaultvalue(item.search_key)
    }
    //点击返回文字
    const handBack = () => {
        setHasFonts(false)
        setSearchList([])
    }
    return (
        <View className={styles.main}>
            <Search placeholder='请输入搜索布料' defaultValue={defaultvalue} showBtn={false} changeOnSearch={getSearchData} debounceTime={300} >
                <View className={styles.cancelFont} onClick={() => back()}>取消</View>
            </Search>
            <View className={styles.line}></View>
            {
                !hasFonts && <>
                    <View className={styles.topBox}>
                        <View className={styles.histroyFonts}>历史搜索</View>
                        <View className={classnames('iconfont', 'icon-shaixuan', styles.icon_delect)}></View>
                    </View>
                    {!!histroyList.length &&
                        <View className={styles.bigBox}>
                            {histroyList.map((item, index) => {
                                return (
                                    <View onClick={() => handItem(item)} key={index} className={styles.itemBox}>{item.search_key}</View>
                                )
                            })}
                        </View>
                    }
                    {
                        !histroyList.length && <Empty picUrl='https://cdn.zzfzyc.com/empty.png' fonst={'无搜索历史'}></Empty>
                    }
                </>
            }
            {
                hasFonts && <>
                    <View className={styles.topBox}>
                        <View className={styles.histroyLeft}>
                            <View className={styles.histroyFonts}>搜索结果</View>
                            <View className={styles.back} onClick={() => handBack()}>返回</View>
                        </View>
                    </View>
                    {
                        !!searchList.length && searchList.map((item, index) => {
                            return (
                                <Goods clickItem={() => showCart(item)} key={index} data={item}></Goods>
                            )
                        })
                    }
                    {
                        !searchList.length && <Empty picUrl='https://cdn.zzfzyc.com/empty.png' fonst={'暂无数据'}></Empty>
                    }
                </>
            }
            <ShopCart handSure={() => handSure()}
                clientName={clientObj?.clientName}
                clientId={clientObj?.clientId}
                modeFont={search.modeId}
                handPlus={(item) => handPlus(item)}
                obj={goodObj}
                getSearchData={(e) => { getSearchDataInput(e) }}
                hasBottom={false}
                reduceNums={(item) => { reduceNums(item) }}
                addNums={(item) => { handAdd(item) }}
                showPopup={showShopCart}
                handCheck={(item) => { handCheckMode(item) }}
                closePopup={() => closePoup()}
                goodList={goodList}
                typeList={typeList}
                onBlur={(e, id) => onBlur(e, id)}
            ></ShopCart>

        </View>

    )
})
// oninputEvent={(e, item) => { onInputEven?.(e, item) }}
