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 Barrage from './barrage'
import {connect} from "react-redux"
import {getCourses, addCourseToCart} from "./actions"
import {getParam, http, browser, wxShare} from "@/utils"
import {Toast} from 'antd-mobile'
import {bindActionCreators} from "redux";
import {delCountryNum} from './../country/countryRedux';

import RedPacket from './redPacket';

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, // 是否是拼团课程 控制首次单集购买后的 全集购买 接口： 拼团课程走拼团接口，否则直接走购买接口
            isRedPacket: true
        }
    }

    componentDidMount() {
        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()
        }

        this.judgeIsRedPacket();

        // 红包链接进入详情也
        if (getParam('share_code')) {
            this.setState({
                isRedPacket: true
            });
        }
    }

    // 判断时候未红包课程
    judgeIsRedPacket = () => {
        http.get(`${API.home}/sys/redPacket/showShareActive/${getParam('id')}`).then(res => {
            const {code, data} = res.data;
            if (code === 200) {
                this.setState({
                    isRedPacket: data.is_show
                });
            }
        })
    }

    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;
                    document.title = `${course_info.course_title} - 七月在线`;
                    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 = (v_course_id, video_id) => {
        const {user} = this.props
        const uid = user && user.data && user.data.uid
        if (!uid) {
            this.props.history.push('/passport/login')
        } else {
            this.props.history.push(`/play/video?id=${v_course_id}&video_id=${video_id}`);
        }
    }
    // 点击子组件单集购买按钮
    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);
        // }
        const {history} = this.props;
        const {course = {}} = this.state;
        if (course.course_info && course.course_info.self_oid) {
            history.push(`/togroup?id=${course.course_info.self_oid}`);
        }
    }

    // 自组件传给父组件的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, isRedPacket} = 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' path={`/detail/id=${getParam('id')}`} />

                    {/*弹幕*/}
                    <Barrage isShow={course_info.is_show}/>

                    {/*课程*/}
                    <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>

                    {/*正常课程已购买时显示*/}

                    {/*
                    没有权限：不显示
                    vip及赠课：显示黄的
                    不在vip范围内，单独购买：显示蓝的
                    单独买了课然后买了vip：显示蓝的

                    vip_range是vip里买的课，而且买了vip才会返回时间
                    is_pay 1是单独购买 0是买vip赠的
                    is_vip 1是属于vip赠的 0是不在vip范围内的
                    */}
                    {
                       course_info.is_baoming === 1 && course_info.is_pay == 1 && course_info.contact_type == 1 && course_info.course_qq &&
                        <div className='group'>
                            上课QQ群：{course_info.course_qq}，加群请备注您的学号：{course_info.uid}
                        </div>
                    }
                    {
                       course_info.is_baoming === 1 && course_info.is_pay == 1 && course_info.contact_type == 2 && course_info.course_qq &&
                        <div className='group'>
                            请添加班主任微信：{course_info.course_qq}，添加时备注学号：{course_info.uid}
                        </div>
                    }


                    {/*vip课程显示*/}
                    {
                        course_info.vip_range && course_info.is_vip == 1 && course_info.is_pay == 0 && course_info.contact_type == 1 && course_info.course_qq &&
                        <div className="vip">
                            <p>已开通年会员：{course_info.vip_range}</p>
                            <p>上课QQ群：{course_info.course_qq}，加群请备注您的学号：{course_info.uid}</p>
                        </div>
                    }
                    {
                        course_info.vip_range && course_info.is_vip == 1 && course_info.is_pay == 0 && course_info.contact_type == 2 && course_info.course_qq &&
                        <div className="vip">
                            <p>已开通年会员：{course_info.vip_range}</p>
                            <p>请添加班主任微信：{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}*/}

                    {/* 红包 */}
                    {
                        isRedPacket &&
                        <RedPacket
                            history={this.props.history}
                            country={this.props.country}
                            delCountryNum={this.props.delCountryNum}
                            userInfo={this.props.user.data}
                        />
                    }

                    {/*分享赚钱*/}
                    {
                        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}
                        />
                    }

                    {/*
                      * 砍价
                      * is_baoming 否报名 0-未购买弹出报名 1-已购买弹出开始学习
                      * is_dist 是否分销课程
                      * is_bargain 是否砍价课程
                      */}
                    {
                        course_info.is_baoming === 0 && (!course_info.is_aist) && course_info.is_bargain &&
                        <Bargain 
                            country={this.props.country} 
                            delCountryNum={this.props.delCountryNum} 
                        />
                    }

                    {/*课程介绍、大纲*/}
                    <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
        },
        country: state.country
    }
}

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


export default connect(mapStateToProps, mapDispatchToProps)(Detail)