import React, {Component} from 'react'
import './index.scss'
import Bargain from './bargain'
import Group from './group'
import OutLine from './outline'
import {HeaderBar, CallApp} from '../../common'
import ShareRank from "./shareRank"
import Audition from "./audition"
import Single from "./single"
import SingleSuccess from './single/singleSuccess';
import BtnStatus from "./btnstatus"
import Carouselw from "./carousel"
import {connect} from "react-redux"
import {getCourses, addCourseToCart} from "./actions"
import {getParam, http, browser,wxShare} from "@/utils"
import {Toast} from 'antd-mobile'
import {compose, bindActionCreators} from "redux";

class Detail extends Component {

    courseId

    constructor(props) {
        super(props)
        this.state = {
            isbuy: 0,
            isvip: 0,
            auditionBox: false,

            singleBox: false,
            singleType: 1,

            shareRank: false,
            singMess: '',
            barInfo: '',
            share: false,
            countdown: '00:00:00',
            outList: [],
            list: [],
            course: {},

            nowPrice: 0,
            laterPrice: 0,
            isPdd: 0, // 是否是拼团课程 控制首次单集购买后的 全集购买 接口: 拼团课程走拼团接口,否则直接走购买接口
        }
    }

    componentDidMount() {
<<<<<<< HEAD
=======
        if(browser.isWeixin){
            wxShare({
                title: `课程详情页`,
                desc: `课程详情页`,
                link: location.href,
                imgUrl: `${location.origin}/favicon.ico`
            })
        }

>>>>>>> 41f6c77df0ea5567680fccdfa8f0f3095768af5d
        this.fetchCourseInfo();
        const { location: { state = {} } } = this.props;
        if(state.oid) {
            this.check(state.oid);
        }
        if (getParam('is_class') === 1 || getParam('weixinpay')) {
            this.payCallback()
        }
        if (browser.isWeixin) {
            this.isweixinPay()
        }
    }

    componentDidUpdate(prevProps) {
        if(prevProps.user.hasError !== this.props.user.hasError){
            this.fetchCourseInfo()
        }
    }

    payCallback =() => {
        const _this = this;
        if(!getParam('oid')) {
            return;
        }else{
            this.setState({
                singMess: JSON.parse(window.localStorage.getItem('singMess'))
            })
            _this.intervalPayStatus = setInterval(function () {
                http.get(`${API['base-api']}/m/orderState/oid/${getParam('oid')}`).then(res => {
                    if (res.data.errno === 401) {
                        clearInterval(_this.intervalPayStatus);
                        _this.intervalPayStatus = null;
                        // 获取课程类型
                        http.get(`${API['base-api']}/class_order_status/${getParam('oid')}`).then((res) => {
                            if (Number(res.data.data.errno) === 200) {
                                // 正常购买单集成功
                                _this.setState({
                                    singleType: 6,
                                })
                            } else if (Number(res.data.data.errno) === 201) {
                                // 0元参团
                                _this.setState({
                                    singleType: 4,
                                })
                            } else if (Number(res.data.data.errno) === 202) {
                                // 0元购
                                _this.setState({
                                    singleType: 3,
                                })
                            } else if (Number(res.data.data.errno) === 203) {
                                // 三天内特价
                                _this.setState({
                                    nowPrice: res.data.data.data.now_price,
                                    laterPrice: res.data.data.data.three_day_later_price,
                                    singleType: 2,
                                    isPdd: res.data.data.data.is_pdd,
                                })
                            } else {
                                Toast.info(res.data.data.msg, 2)
                            }
                        })
                    }
                })
            }, 1000)
        }
    };
    isweixinPay =()=> {
        let _this = this;
        let weixin_code = getParam('code');
        if (weixin_code) {
            if (!getParam('oid')) {
                return
            } else {
                // this.props.weixinPay(weixin_code)
                this.setState({
                    singMess: JSON.parse(window.localStorage.getItem('singMess'))
                });
                http.get(`${API['base-api']}/pay/wxpay/pub_charge/oid/${getParam('oid')}/code/${weixin_code}`).then((res) => {
                    if (res.data.errno === 0) {
                        const data = res.data.data;
                        function onBridgeReady() {
                            WeixinJSBridge.invoke(
                                'getBrandWCPayRequest', {
                                    "appId": data.appId,                //公众号名称,由商户传入
                                    "timeStamp": data.timeStamp,        //时间戳,自1970年以来的秒数
                                    "nonceStr": data.nonceStr,          //随机串
                                    "package": data.package,
                                    "signType": data.signType,          //微信签名方式:
                                    "paySign": data.paySign             //微信签名
                                },
                                function (res) {
                                    if (res.err_msg == "get_brand_wcpay_request:ok") {
                                        Toast.info('支付成功', 2);
                                        _this.intervalPayStatus = setInterval(function () {
                                            http.get(`${API['base-api']}/m/orderState/oid/${getParam('oid')}`).then(res => {
                                                if (res.data.errno === 401) {
                                                    clearInterval(_this.intervalPayStatus);
                                                    _this.intervalPayStatus = null;
                                                    // 获取课程类型
                                                    http.get(`${API['base-api']}/class_order_status/${getParam('oid')}`).then((res) => {
                                                        if (Number(res.data.data.errno) === 200) {
                                                            // 正常购买单集成功
                                                            _this.setState({
                                                                singleType: 6,
                                                            })
                                                        } else if (Number(res.data.data.errno) === 201) {
                                                            // 0元参团
                                                            _this.setState({
                                                                singleType: 4,
                                                            })
                                                        } else if (Number(res.data.data.errno) === 202) {
                                                            // 0元购
                                                            _this.setState({
                                                                singleType: 3,
                                                            })
                                                        } else if (Number(res.data.data.errno) === 203) {
                                                            // 三天内特价
                                                            _this.setState({
                                                                nowPrice: res.data.data.data.now_price,
                                                                laterPrice: res.data.data.data.three_day_later_price,
                                                                singleType: 2,
                                                                isPdd: res.data.data.data.is_pdd,
                                                            })
                                                        } else {
                                                            Toast.info(res.data.data.msg, 2)
                                                        }
                                                    })
                                                }
                                            })
                                        }, 1000)
                                    } else {
                                        alert('支付失败')
                                    }
                                }
                            )
                        }
                        if (typeof WeixinJSBridge == "undefined") {
                            if (document.addEventListener) {
                                document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false)
                            } else if (document.attachEvent) {
                                document.attachEvent('WeixinJSBridgeReady', onBridgeReady)
                                document.attachEvent('onWeixinJSBridgeReady', onBridgeReady)
                            }
                        } else {
                            onBridgeReady()
                        }
                    } else {
                        Toast.info(res.data.msg, 2)
                    }
                })
            }
        }
    }

    // 判断支付是否成功
    check = (oid) => {
        this.setState({
            singMess: JSON.parse(window.localStorage.getItem('singMess'))
        })
        http.get(`${API['base-api']}/class_order_status/${oid}`).then((res) => {
            if (Number(res.data.data.errno) === 200) {
                // 正常购买单集成功
                this.setState({
                    singleType: 6
                })
            } else if (Number(res.data.data.errno) === 201) {
                // 0元参团
                this.setState({
                    singleType: 4
                })
            } else if (Number(res.data.data.errno) === 202) {
                // 0元购
                this.setState({
                    singleType: 3
                })
            } else if (Number(res.data.data.errno) === 203) {
                // 三天内特价
                this.setState({
                    nowPrice: res.data.data.data.now_price,
                    laterPrice: res.data.data.data.three_day_later_price,
                    singleType: 2,
                    isPdd: res.data.data.data.is_pdd,

                })
            } else {
                Toast.info(res.data.data.msg, 2)
            }
        })
    }

    payCallBack = (singleType, nowPrice, laterPrice) => {
        // Toast.info(singleType, 2);
        const _this = this;
        if(singleType === 2) {
            _this.setState({
                singleType,
                nowPrice,
                laterPrice
            })
        }else{
            _this.setState({
                singleType,
            })
        }
    };
    fetchCourseInfo = () => {
        const id = getParam('id');
        http.get(`${API.home}/m/course/detail/${id}`).then((res) => {
            const {data, code} = res.data;
            if (code === 200) {
                this.setState({
                    course: data
                });
                if (data.course_info) {
                    let course_info = data.course_info;
                    if (course_info.group_status === 3 || course_info.group_status === 4) {
                        let endTime = course_info.pdd_group_info.groupon_member.end_time;
                        let date = endTime * 1000,
                            hours = 0,
                            minutes = 0,
                            seconds = 0;
                        setInterval(() => {
                            date -= 1000
                            hours = `${parseInt(date / (60 * 60 * 1000))}`.padStart(2, 0);
                            minutes = `${parseInt((date - hours * 3600000) / 60000)}`.padStart(2, 0);
                            seconds = `${parseInt((date - hours * 3600000 - minutes * 60000) / 1000)}`.padStart(2, 0);
                            this.setState({
                                countdown: `${hours}:${minutes}:${seconds}`
                            });
                        }, 1000)
                    }
                    wxShare({
                        title: course_info.course_title,
                        desc: course_info.index_description,
                        link: encodeURI(location.origin + '/detail?id=' + getParam('id')),
                        imgUrl:course_info.image_name
                    });
                }

            }
        });
    }

    // 点击子组件试听按钮
    toAudition = () => {
        const {user} = this.props
        const uid = user && user.data && user.data.uid
        if (!uid) {
            this.props.history.push('/passport/login')
        } else {
            this.setState({
                auditionBox: true,
            })
        }
    }
    // 点击子组件单集购买按钮
    toSingleset = (item) => {
        const {user} = this.props
        const uid = user && user.data && user.data.uid
        if (!uid) {
            this.props.history.push('/passport/login')
        } else {
            this.setState({
                singleBox: true,
                singleType: 1,
                singMess: item
            });
            window.localStorage.setItem('singMess', JSON.stringify(item))
        }
    }

    // componentWillReceiveProps(nextProps) {
    //     let _this = this;
    //     if (nextProps.courseInfo.course_info) {
    //         let courseInfo = nextProps.courseInfo.course_info;
    //         if (courseInfo.group_status === 3 || courseInfo.group_status === 4) {
    //             let endTime = courseInfo.pdd_group_info.groupon_member.end_time;
    //             let date = endTime * 1000,
    //                 hours = 0,
    //                 minutes = 0,
    //                 seconds = 0;
    //             setInterval(() => {
    //                 date -= 1000
    //                 hours = `${parseInt(date / (60 * 60 * 1000))}`.padStart(2, 0);
    //                 minutes = `${parseInt((date - hours * 3600000) / 60000)}`.padStart(2, 0);
    //                 seconds = `${parseInt((date - hours * 3600000 - minutes * 60000) / 1000)}`.padStart(2, 0);
    //                 _this.setState({
    //                     countdown: `${hours}:${minutes}:${seconds}`
    //                 });
    //             }, 1000)
    //         }
    //     }
    // }

    // 加入购物车 type:1 加入购物车,2加入购物车并跳转到购物车页面去支付
    toCart = (type) => {
        const { history, addCourseToCart } = this.props;
        let data = {
            course_id: getParam('id')
        };
        http.post(`${API.home}/m/cart/add`, data).then((res) => {
            if (res.data.code === 200) {
                if (type === 1) {
                    Toast.info('已加入购物车', 2)
                    // this.props.getCourses()
                    // document.location.reload()
                    addCourseToCart();
                    this.fetchCourseInfo();
                } else {
                    history.replace('/shopcart');ß
                }
            } else if (res.data.code === 15001) {
                history.replace('/shopcart');
            } else if (res.data.code === 4030) {
                history.replace('/passport');
            } else {
                Toast.info(res.data.msg, 2);
            }
        })
    };

    invitedFriends = () => {
        const {course_title, image_name, course_id, pdd_group_info, pdd_group_info: {groupon_member, groupon_member: {number}, price}} = this.state.course.course_info;
        if (browser.isWeixin) {
            wxShare({
                title: `【仅剩${number}个名额】我${price}元拼了《${course_title}》`,
                desc: course_title,
                link: location.href,
                imgUrl: image_name,
            });
        } else {
            Toast.info('请在微信中使用分享功能!', 2);
        }
    }

    // 自组件传给父组件的boxHide
    boxHide = (val) => {
        this.setState({
            auditionBox: val,
            singleBox: val,
            singleType: 1
        })
        this.props.history.push(`/detail?id=${getParam('id')}`);

    }

    render() {
        const { course: { course_info={} }, barInfo, singleBox, singleType } = this.state;
        let courseInfo = '',
            service = '',
            number = 0,
            endTime = 0;
        // if (this.props.courseInfo.course_info) {
        //     courseInfo = this.props.courseInfo.course_info;
        //     service = courseInfo.service;
            if (course_info.group_status === 3 || course_info.group_status === 4) {
                number = course_info.pdd_group_info.groupon_member.number;
            }
        // }
        const {share, countdown, list, outList} = this.state;
        let href = '';
        const { location: { state = {}} } = this.props;
        if(state.to && state.to === 'classify') {
            href = '/classify'
        }
        if(state.oid) {
            href='/classify'
        }
        if(getParam('dist_code')) {
            href='/'
        }
        return (
            <div>
            <div className='detail-box'>
                <HeaderBar
                    title='课程详情'
                    arrow={true}
                    cart={true}
                    toHref={href}
                />
                <CallApp className='toapp' />

                {/*弹幕*/}
                <Carouselw />

                {/*课程*/}
                <div className='course-content'>
                    <div className='cover'>
                        <img src={course_info.image_name} alt="" />
                        {
                            course_info.is_aist &&
                            <span className='return_cash' />
                        }
                    </div>
                    <div className="info">
                        <p className='title'>{course_info.course_title}</p>
                        <p className='contact text-overflow-2'>{course_info.simpledescription}</p>
                        <div className='des'>
                            {
                                course_info.is_baoming === 0 &&
                                <p className="course-price">
                                    <span className="new">¥{course_info.price1}</span>
                                    <span className="old">¥{course_info.price0}</span>
                                </p>
                            }
                            {
                                course_info.is_baoming === 1 &&
                                <span className="isbuy">已购买</span>
                            }
                        </div>
                    </div>
                </div>

                {/*正常课程已购买时显示*/}
                {
                    course_info.is_baoming === 1 &&
                    <div className='group'>
                        上课QQ群:{course_info.course_qq},加群请备注您的学号:{course_info.uid}
                    </div>
                }

                {/*vip课程显示*/}
                {
                    course_info.vip_range &&
                    <div className="vip">
                        <p>已开通年会员:{course_info.vip_range}</p>
                        <p>年会员QQ群:{course_info.course_qq},加群请备注您的学号:{course_info.uid}</p>
                    </div>
                }

                {/*服务承诺*/}
                <div className='promise'>
                    <label>服务承诺</label>
                    <p>
                        {
                            course_info.service && course_info.service.length > 0 && course_info.service.map((item, index) => {
                                return (
                                    <span key={index}> {item} </span>
                                )
                            })
                        }
                    </p>
                </div>

                {/*试听弹窗*/}
                <Audition auditionBox={this.state.auditionBox} boxHide={this.boxHide}/>

                {/*单集购买弹窗*/}
                {
                singleBox &&
                <Single
                    singleType={this.state.singleType}
                    singleBox={this.state.singleBox}
                    boxHide={this.boxHide}
                    data={this.state.singMess}
                    vcourseId={course_info.v_course_id}
                    videoId={this.state.singMess.video_id}
                    title={course_info.course_title}
                    check={this.check}
                    courseId={course_info.course_id}
                />}
                {/* 单集购买成功弹窗 */}
                {
                    singleType !== 1 &&
                    <SingleSuccess
                    boxHide={this.boxHide}
                    data={this.state.singMess}
                        singleType={singleType}
                        vcourseId={course_info.v_course_id}
                        videoId={this.state.singMess.video_id}
                        nowPrice={this.state.nowPrice}
                        isPdd={this.state.isPdd}
                        laterPrice={this.state.laterPrice}
                        courseId={course_info.course_id}
                    />
                }
                {/*payCallback={this.payCallback}*/}
                {/*weixinPay = {this.weixinPay}*/}

                {/*分享赚钱*/}
                {
                    course_info.is_dist &&
                    <ShareRank courseInfo={course_info} />
                }

                {/**
                  * 拼团
                  * is_aist: 是否AI特训营
                  * group_status: 团状态,3:课程有小团 用户没参加小团;4:用户参加了小团
                */}
                {
                    !course_info.is_aist && (course_info.group_status === 3 || course_info.group_status === 4) &&
                    <Group
                        courseInfo={course_info}
                        history={this.props.history}
                        countdown={countdown}
                        invitedFriends={this.invitedFriends}
                    />
                }

                {/*砍价*/}
                {
                    course_info.is_baoming === 0 && (!course_info.is_aist) && course_info.is_bargain &&
                    <Bargain />
                }

                {/*课程介绍、大纲*/}
                <OutLine
                    data={course_info}
                    toAudition={this.toAudition}
                    toSingleset={this.toSingleset}
                />

                {/*课程按钮*/}
                {
                course_info &&
                <BtnStatus
                    countdown={countdown}
                    data={course_info}
                    user={this.props.user}
                    invitedFriends={this.invitedFriends}
                    // addCourseToCart={this.props.addCourseToCart}
                    toCart={this.toCart}
                    history={this.props.history}
                />}

                {
                    share ? (
                        <div
                            className='groupSuccessMbc'
                            onClick={() => {
                                this.setState({share: false})
                            }}
                        >
                            <div className='tipContent'>
                                {`还差${number}人,分享到3个群,成团率高达98%`}
                            </div>
                            <div className='tipArrow'>
                                <i className='iconfont iconyindao' />
                            </div>
                        </div>
                    ) : null
                }
            </div>
            </div>
        )
    }

}

const mapStateToProps = (state) => {
    return {
        // courseInfo: state.courseInfo,
        user: {
            ...state.user
        }
    }
}

// const mapDispatchToProps = {
//     fetchCoursesListIfNeeded
// }
const mapDispatchToProps = (dispatch) => {
    return bindActionCreators(
        {
            getCourses,
            addCourseToCart
        },
        dispatch
    )
}


export default connect(mapStateToProps, mapDispatchToProps)(Detail)