import React, { PureComponent } from 'react';
import SearchHeader from './searchHead'
import VList from '@/common/VList'
import { http, getParam } from '@/utils'
import './search-result.scss'
import Recommendation from './recommendation'
import throttle from 'lodash/throttle'


const ForwardRefSearchHead = React.forwardRef((props, ref) => {
    return <SearchHeader {...props} forwardedRef={ref}/>
})

const Bottom = ({item}) => {
    return (
        <div className='bottom'>
            <span className='price'>¥{item.price1}</span>
            <span className='stale-price'>¥{item.price0}</span>
        </div>
    )
}

class SearchResult extends PureComponent {
    prevScrollY = 0
    searchHead = React.createRef()
    swipeUp = 'up'
    swipeDown = 'down'

    state = {
        courseList: [],
        value: decodeURIComponent(getParam('word')) || '',
        searchHistory: JSON.parse(localStorage.getItem('searchHistory')) || [],
        fixedHeader: false,
        searchHeadStyle: {top: 0},
        swipeDirection: this.swipeUp,
        isHide: false,
        basicTop: 0
    }

    componentDidMount() {
        this.getCourses(getParam('word'))
        document.addEventListener('scroll', this.handleScroll)
    }

    componentWillUnmount() {
        document.removeEventListener('scroll', this.handleScroll)
    }


    getCourses = (word) => {
        http.get(`${API['search-api']}/search/${word}?type=course&page=1`)
            .then(res => {
                const data = res.data

                if (data.errno === 0) {
                    this.setState({
                        courseList: data.data.info['search_data'].course
                    });
                }
            })
    }

    handleClick = id => {
        this.props.history.push(`/detail?id=${id}`)
    }

    handleSearch = () => {
        this.state.value && this.getCourses(this.state.value)
    }

    handleChange = value => {
        this.setState({value})
    }

    toCourseDetail = (id) => {
        const {history} = this.props;
        history.push(`/detail?id=${id}`)
    }

    handleScroll = throttle(() => {
        let y = window.scrollY < 0? 0 : window.scrollY, 
            headY = this.searchHead.current.offsetTop,
            h = this.searchHead.current.offsetHeight;
        if(y > this.prevScrollY) {
            this.setState({
                searchHeadStyle: {
                    top : `${-h}px`
                }
            });
        }
        if(y < this.prevScrollY) {
            this.setState({
                searchHeadStyle: {
                    top: 0
                }
            });
        }
        // if (y < this.prevScrollY) {
        //     if (this.state.swipeDirection === this.swipeDown) {
        //         y <= headY && this.state.searchHeadStyle.position !== 'fixed' && 
        //         this.setState({
        //             searchHeadStyle: {
        //                 top: `0`,
        //                 position: 'fixed'
        //             }
        //         })
        //     } else {
        //         this.setState({
        //             swipeDirection: this.swipeDown
        //         }, () => {
        //             if (this.state.swipeDirection === this.swipeDown) {
        //                 let h = y > document.querySelector('body').offsetHeight? document.querySelector('body').offsetHeight: y;
        //                 let h1 = this.searchHead.current.offsetHeight
        //                     this.setState({
        //                         searchHeadStyle: {
        //                             // top: `${h > headY ? h - h1 : h}px`
        //                             top: `${y}px`
        //                         }
        //                     })
                        
                        
        //             }
        //         })
        //     }
        // } else {
        //     this.state.swipeDirection !== this.swipeUp &&
        //     this.setState({
        //         swipeDirection: this.swipeUp,
        //         searchHeadStyle: {
        //             position: 'absolute',
        //             top: `${y}px`
        //         }
        //     })
        // }
        this.prevScrollY = y;
    }, 0)

    render() {
        const { courseList, isHide } = this.state;

        return (
            <div
                className={'search-result'}>
                <ForwardRefSearchHead
                    handleSearch={this.handleSearch}
                    value={this.state.value}
                    handleChange={this.handleChange}
                    searchHistory={this.state.searchHistory}
                    style={this.state.searchHeadStyle}
                    ref={this.searchHead}
                    isHide={isHide}
                />
                {

                    courseList && courseList.length > 0 ?
                        <ul>
                            {
                                courseList.map(item => {
                                    const Info = (
                                        <div className="info">
                                            <p className='title'>{item.course_title}</p>
                                            <p className='des'>{item.simpledescription}</p>
                                            <Bottom
                                                item={item}
                                            />
                                        </div>
                                    )
                                    const status = (
                                        (item['bargain_num'] || item['groupon_num']) ?
                                            <div
                                                className='status'>
                                                {
                                                    item['bargain_num'] === 0 ? `砍价减${item['groupon_num']}元` : `拼团减${item['bargain_num']}元`
                                                }
                                            </div>
                                            : null
                                    )
                                    return (
                                        <VList
                                            img={item.image_name}
                                            toDetail={this.toCourseDetail}
                                            key={item.course_id}
                                            info={Info}
                                            id={item['course_id']}
                                            status={status}
                                        />
                                    )
                                })
                            }
                        </ul>
                        : <div className="empty">
                            抱歉!没有搜到相关内容
                        </div>
                }
                <Recommendation/>

            </div>
        );
    }
}


export default SearchResult;