import React, { Component } from 'react';
import classnames from 'classnames';
import { http , getParam, SendMessageToApp} from '@/utils';
import { Toast } from "antd-mobile";
import ListFrame from './../listFrame/index';
import CourseItem from './../courseItem/index';
import ListHeader from './../listHeader';
import './index.scss';
import cookie from "js-cookie";

class CourseList extends Component {
  constructor(props) {
    super(props);
    this.state = {
      basic: {
        course: [],
        courseList: [],
        isMore: false,
      },
      advanced: {
        course: [],
        courseList: [],
        isMore: false,
      },
      higher: {
        course: [],
        courseList: [],
        isMore: false,
      },
      expand: {
        course: [],
        courseList: [],
        isMore: false,
      },
      group: {
        course: [],
        courseList: [],
        isMore: false,
      },
      training: {
        course: [],
        courseList: [],
        isMore: false,
      }
    };
  }

  componentDidMount() {

    // 精品课程-集训营、就业班/AI特训营
    this.fetchCourseData();

    // AI之路-基础
    this.fetchAICourse('one');

    // AI之路-进阶
    this.fetchAICourse('two');

    // AI之路-高阶
    this.fetchAICourse('three');

    // AI之路-拓展
    this.fetchAICourse('four');
  }

  shouldComponentUpdate(nextProps, nextState, nextContext) {
    if(this.props.isApp !== nextProps.isApp) {
      // 精品课程-集训营、就业班/AI特训营
      this.fetchCourseData();

      // AI之路-基础
      this.fetchAICourse('one');

      // AI之路-进阶
      this.fetchAICourse('two');

      // AI之路-高阶
      this.fetchAICourse('three');

      // AI之路-拓展
      this.fetchAICourse('four');
      return false;
    }
    return true;
  }

  fetchAICourse = (key) => {
    const { basic, advanced, higher, expand } = this.state;
    http.get(`${API.home}/sys/ai_grow_up_courses/${key}`).then(res => {
      const {code, data} = res.data;
      if (code === 200) {
        if (data.length > 4) {
          if (key === 'one') {
            this.setState({
              basic: Object.assign({}, basic, {
                isMore: true,
                course: data.filter((item, index) => index < 4),
                courseList: data,
              })
            });
          }
          if (key === 'two') {
            this.setState({
              advanced: Object.assign({}, advanced, {
                isMore: true,
                course: data.filter((item, index) => index < 4),
                courseList: data,
              })
            });
          }
          if (key === 'three') {
            this.setState({
              higher: Object.assign({}, higher, {
                isMore: true,
                course: data.filter((item, index) => index < 4),
                courseList: data,
              })
            });
          }
          if (key === 'four') {
            this.setState({
              expand: Object.assign({}, expand, {
                isMore: true,
                course: data.filter((item, index) => index < 4),
                courseList: data,
              })
            });
          }
        } else {
          if (key === 'one') {
            this.setState({
              basic: Object.assign({}, basic, {
                isMore: false,
                course: data,
                courseList: data,
              })
            });
          }
          if (key === 'two') {
            this.setState({
              advanced: Object.assign({}, advanced, {
                isMore: false,
                course: data,
                courseList: data,
              })
            });
          }
          if (key === 'three') {
            this.setState({
              higher: Object.assign({}, higher, {
                isMore: false,
                course: data,
                courseList: data,
              })
            });
          }
          if (key === 'four') {
            this.setState({
              expand: Object.assign({}, expand, {
                isMore: false,
                course: data,
                courseList: data,
              })
            });
          }
        }
      }
    });
  }

  fetchCourseData = () => {
    const { group, training } = this.state;
    http.get(`${API.home}/sys/preheat_data`).then(res => {
      const {code, data} = res.data;
      if (code === 200) {
        if (data.excellent_course.length > 2) {
          this.setState({
            group: Object.assign({}, group, {
              isMore: true,
              course: data.excellent_course.filter((item, index) => index < 2),
              courseList: data.excellent_course,
            })
          });
        } else {
          this.setState({
            group: Object.assign({}, group, {
              isMore: false,
              course: data.excellent_course,
              courseList: data.excellent_course,
            })
          });
        }
        if (data.ai_elite_courses.length > 2) {
          this.setState({
            training: Object.assign({}, training, {
              isMore: true,
              course: data.ai_elite_courses.filter((item, index) => index < 2),
              courseList: data.ai_elite_courses,
            })
          });
        } else {
          this.setState({
            training: Object.assign({}, training, {
              isMore: false,
              course: data.ai_elite_courses,
              courseList: data.ai_elite_courses,
            })
          });
        }
      }
    });
  }

  handleToMore = (key) => {
    let data = {};
    if(this.state[key]['isMore']) {
      data[key] = {
        isMore: !this.state[key]['isMore'],
        course: this.state[key]['courseList'],
        courseList: this.state[key]['courseList']
      };
      this.setState({
        ...data
      });
    }else {
      if(key === 'group' || key === 'training') {
        data[key] = {
          isMore: !this.state[key]['isMore'],
          course: this.state[key]['courseList'].filter((item, index) => index < 2),
          courseList: this.state[key]['courseList']
        };
      }else {
        data[key] = {
          isMore: !this.state[key]['isMore'],
          course: this.state[key]['courseList'].filter((item, index) => index < 4),
          courseList: this.state[key]['courseList']
        };
      }
      this.setState({
        ...data
      });
    }
  }

  toReceiveCoupon(id, key = '') {
    const {isLogin, toLogin} = this.props;


    if(isLogin) {
      var _czc = _czc || [];
      var name = '课程id=' + id;
      _czc.push(["_trackEvent", name, 'm端双十一立即领券']);

      http.post(`${API.home}/sys/activity/coupon/receive`, {
        course_id: id
      }).then(res => {
        const { code, msg } = res.data;
        if(code === 200) {
          Toast.info('领取成功～', 2, null, false);
          let obj = {};
          obj[key] = {
            isMore: this.state[key]['isMore'],
            course: this.state[key]['course'].map(item => {
              if(item.course_id === id) {
                return Object.assign({}, item, {
                  course_status: 2
                });
              }
              return item;
            }),
            courseList: this.state[key]['courseList'].map(item => {
              if(item.course_id === id) {
                return Object.assign({}, item, {
                  course_status: 2
                });
              }
              return item;
            }),
          }
          this.setState({
            ...obj
          });
        } else {
          Toast.info(msg, 2, null, false);
        }
      });
    }else{
      toLogin();
    }

  }


  toQQque=()=>{
    if (!getParam('version')) {
      location.href='https://q.url.cn/AB8aue?_type=wpa&qidian=true'
    } else {
      SendMessageToApp("toQQ", 'https://q.url.cn/AB8aue?_type=wpa&qidian=true')
    }
  }

  // 去课程详情页
  toCourse = (courseId) => {
    const { history } = this.props;
    if (!getParam('version')) {
      history.push(`/detail?id=${courseId}`);
    } else {
      SendMessageToApp("toCourse", courseId);
    }
  }

  // 开始使用
  toCourse2 = (courseId) => {
    const { history } = this.props;
    var _czc = _czc || [];
    var name = '课程id=' + courseId;
    _czc.push(["_trackEvent", name, 'm端双十一开始使用优惠券']);

    if (!getParam('version')) {
      history.push(`/detail?id=${courseId}`);
    } else {
      SendMessageToApp("toCourse", courseId);
    }
  }


  render() {
    const { isFormal } = this.props;
    const { basic, advanced, higher, expand, group, training } = this.state;
    return (
        <div className="boutique-course">
          <ListHeader text="集训营、就业班" size="middle" styles={{margin: '20px 0 15px'}} />
          {/* 集训营、就业班 */}
          {
            (group.course && group.course.length > 0) &&
            <>
              <div data-layout="row">
                {
                  group.course.map(item => (
                      <CourseItem image={item.image_name} key={item.course_id} id={item.course_id} toCourse={this.toCourse}>
                        <div className="coupon-course__footer">
                          <a onClick={() => this.toQQque()} className="course-button">立抢超低团购价</a>
                        </div>
                      </CourseItem>
                  ))
                }
              </div>
              {
                (group.courseList && group.courseList.length > 2) &&
                <button className="more-button" onClick={() => this.handleToMore('group')}>
                  {group.isMore? '展开更多' : '收起'}
                </button>
              }
            </>
          }

          <ListHeader text="AI特训营" size="middle" styles={{margin: '0 0 15px'}} />
          {/* AI特训营 */}
          {
            (training.course && training.course.length > 0) &&
            <>
              <div data-layout="row">
                {
                  training.course.map(item => (
                      <CourseItem image={item.image_name} key={item.course_id} id={item.course_id} toCourse={this.toCourse}>
                        <div className="coupon-course__footer">
                          {
                            item.course_status === 1 &&
                            <a
                                className={classnames("coupon-course__button", "coupon-course__button--receive")}
                                onClick={() => this.toReceiveCoupon(item.course_id, 'training')}
                            >
                          <span className="coupon-course__button-price">
                            <em>¥{item.coupon}</em>
                            <i>代金券</i>
                          </span>
                              <span className="coupon-course__button-label">立即领券</span>
                            </a>
                          }

                          {
                            (isFormal === 0 && item.course_status === 2) &&
                            <a className="coupon-course__button">
                          <span className="coupon-course__button-price">
                            <em>¥{item.coupon}</em>
                            <i>代金券</i>
                          </span>
                              <span className="coupon-course__button-label">11.11开始使用</span>
                            </a>
                          }
                          {
                            (isFormal === 1 && item.course_status === 2) &&
                            <a
                                onClick={() => this.toCourse2(item.course_id)}
                                className="coupon-course__button">
                          <span className="coupon-course__button-price">
                            <em>¥{item.coupon}</em>
                            <i>代金券</i>
                          </span>
                              <span className="coupon-course__button-label">开始使用</span>
                            </a>
                          }
                          {
                            item.course_status === 3 &&
                            <a onClick={() => this.toCourse(item.course_id)}
                               className="course-button"
                               data-type="study"
                            >开始学习</a>
                          }
                        </div>
                      </CourseItem>
                  ))
                }
              </div>
              {
                (training.courseList && training.courseList.length > 2) &&
                <button className="more-button" onClick={() => this.handleToMore('training')}>
                  {training.isMore? '展开更多' : '收起'}
                </button>
              }
            </>
          }

          {/* AI成长之路--基础 */}
          <ListHeader text="AI成长之路" size="middle" styles={{margin: '0 0 15px'}} />
          {
            (basic.course && basic.course.length > 0) &&
            <>
              <h4 className="ai-course__subtitle">基础</h4>
              <div data-layout="row">
                {
                  basic.course.map(item => (
                      <CourseItem image={item.image_name} key={item.course_id} id={item.course_id} toCourse={this.toCourse}>
                        {
                          item.type === 0 &&
                          <div className="coupon-course__footer">
                            {
                              item.course_status === 1 &&
                              <a
                                  className={classnames("coupon-course__button", "coupon-course__button--receive")}
                                  onClick={() => this.toReceiveCoupon(item.course_id, 'basic')}
                              >
                                <span className="coupon-course__button-price">
                                  <em>¥{item.coupon}</em>
                                  <i>代金券</i>
                                </span>
                                <span className="coupon-course__button-label">立即领券</span>
                              </a>
                            }

                            {
                              (isFormal === 0 && item.course_status === 2) &&
                              <a className="coupon-course__button">
                                <span className="coupon-course__button-price">
                                  <em>¥{item.coupon}</em>
                                  <i>代金券</i>
                                </span>
                                <span className="coupon-course__button-label">11.11开始使用</span>
                              </a>
                            }
                            {
                              (isFormal === 1 && item.course_status === 2) &&
                              <a onClick={() => this.toCourse2(item.course_id)} className="coupon-course__button">
                                <span className="coupon-course__button-price">
                                  <em>¥{item.coupon}</em>
                                  <i>代金券</i>
                                </span>
                                <span className="coupon-course__button-label">开始使用</span>
                              </a>
                            }
                            {
                              item.course_status === 3 &&
                              <a onClick={() => this.toCourse(item.course_id)}
                                 className="course-button"
                                 data-type="study"
                              >开始学习</a>
                            }
                          </div>
                        }
                        {
                          item.type === 1 &&
                          <div className="cent-course__footer">
                            {
                              (item.course_status === 1 || item.course_status === 2) &&
                              <a onClick={() => this.toCourse(item.course_id)} className="course-button">1分钱开团</a>
                            }
                            {
                              item.course_status === 3 &&
                              <a onClick={() => this.toCourse(item.course_id)} className="course-button" data-type="study">开始学习</a>
                            }
                          </div>
                        }
                      </CourseItem>
                  ))
                }
              </div>
              {
                (basic.courseList && basic.courseList.length > 4) &&
                <button className="more-button" onClick={() => this.handleToMore('basic')}>
                  {basic.isMore? '展开更多' : '收起'}
                </button>
              }
            </>
          }

          {/* AI成长之路--进阶 */}
          {
            (advanced.course && advanced.course.length > 0) &&
            <>
              <h4 className="ai-course__subtitle">进阶</h4>
              <div data-layout="row">
                {
                  advanced.course.map(item => (
                      <CourseItem image={item.image_name} key={item.course_id} id={item.course_id} toCourse={this.toCourse}>
                        {
                          item.type === 0 &&
                          <div className="coupon-course__footer">
                            {
                              item.course_status === 1 &&
                              <a
                                  className={classnames("coupon-course__button", "coupon-course__button--receive")}
                                  onClick={() => this.toReceiveCoupon(item.course_id, 'advanced')}
                              >
                            <span className="coupon-course__button-price">
                              <em>¥{item.coupon}</em>
                              <i>代金券</i>
                            </span>
                                <span className="coupon-course__button-label">立即领券</span>
                              </a>
                            }
                            {
                              (isFormal === 0 && item.course_status === 2) &&
                              <a className="coupon-course__button">
                            <span className="coupon-course__button-price">
                              <em>¥{item.coupon}</em>
                              <i>代金券</i>
                            </span>
                                <span className="coupon-course__button-label">11.11开始使用</span>
                              </a>
                            }
                            {
                              (isFormal === 1 && item.course_status === 2) &&
                              <a onClick={() => this.toCourse2(item.course_id)} className="coupon-course__button">
                            <span className="coupon-course__button-price">
                              <em>¥{item.coupon}</em>
                              <i>代金券</i>
                            </span>
                                <span className="coupon-course__button-label">开始使用</span>
                              </a>
                            }
                            {
                              item.course_status === 3 &&
                              <a onClick={() => this.toCourse(item.course_id)}
                                 className="course-button"
                                 data-type="study"
                              >开始学习</a>
                            }
                          </div>
                        }
                        {
                          item.type === 1 &&
                          <div className="cent-course__footer">
                            {
                              (item.course_status === 1 || item.course_status === 2) &&
                              <a onClick={() => this.toCourse(item.course_id)} className="course-button">1分钱开团</a>
                            }
                            {
                              item.course_status === 3 &&
                              <a onClick={() => this.toCourse(item.course_id)} className="course-button" data-type="study">开始学习</a>
                            }
                          </div>
                        }
                      </CourseItem>
                  ))
                }
              </div>
              {
                (advanced.courseList && advanced.courseList.length > 4) &&
                <button className="more-button" onClick={() => this.handleToMore('advanced')}>
                  {advanced.isMore? '展开更多' : '收起'}
                </button>
              }
            </>
          }

          {/* AI成长之路--高阶 */}
          {
            (higher.course && higher.course.length > 0) &&
            <>
              <h4 className="ai-course__subtitle">高阶</h4>
              <div data-layout="row">
                {
                  higher.course.map(item => (
                      <CourseItem image={item.image_name} key={item.course_id} id={item.course_id} toCourse={this.toCourse}>
                        {
                          item.type === 0 &&
                          <div className="coupon-course__footer">
                            {
                              item.course_status === 1 &&
                              <a
                                  className={classnames("coupon-course__button", "coupon-course__button--receive")}
                                  onClick={() => this.toReceiveCoupon(item.course_id, 'higher')}
                              >
                            <span className="coupon-course__button-price">
                              <em>¥{item.coupon}</em>
                              <i>代金券</i>
                            </span>
                                <span className="coupon-course__button-label">立即领券</span>
                              </a>
                            }
                            {
                              (isFormal === 0 && item.course_status === 2) &&
                              <a className="coupon-course__button">
                            <span className="coupon-course__button-price">
                              <em>¥{item.coupon}</em>
                              <i>代金券</i>
                            </span>
                                <span className="coupon-course__button-label">11.11开始使用</span>
                              </a>
                            }
                            {
                              (isFormal === 1 && item.course_status === 2) &&
                              <a onClick={() => this.toCourse2(item.course_id)} className="coupon-course__button">
                            <span className="coupon-course__button-price">
                              <em>¥{item.coupon}</em>
                              <i>代金券</i>
                            </span>
                                <span className="coupon-course__button-label">开始使用</span>
                              </a>
                            }
                            {
                              item.course_status === 3 &&
                              <a onClick={() => this.toCourse(item.course_id)}
                                 className="course-button"
                                 data-type="study"
                              >开始学习</a>
                            }
                          </div>
                        }
                        {
                          item.type === 1 &&
                          <div className="cent-course__footer">
                            {
                              (item.course_status === 1 || item.course_status === 2) &&
                              <a onClick={() => this.toCourse(item.course_id)} className="course-button">1分钱开团</a>
                            }
                            {
                              item.course_status === 3 &&
                              <a onClick={() => this.toCourse(item.course_id)} className="course-button" data-type="study">开始学习</a>
                            }
                          </div>
                        }
                      </CourseItem>
                  ))
                }
              </div>
              {
                (higher.courseList && higher.courseList.length > 4) &&
                <button className="more-button" onClick={() => this.handleToMore('higher')}>
                  {higher.isMore? '展开更多' : '收起'}
                </button>
              }
            </>
          }

          {/* AI成长之路--扩展 */}
          {
            (expand.course && expand.course.length > 0) &&
            <>
              <h4 className="ai-course__subtitle">扩展</h4>
              <div data-layout="row">
                {
                  expand.course.map(item => (
                      <CourseItem image={item.image_name} key={item.course_id} id={item.course_id} toCourse={this.toCourse}>
                        {
                          item.type === 0 &&
                          <div className="coupon-course__footer">
                            {
                              item.course_status === 1 &&
                              <a
                                  className={classnames("coupon-course__button", "coupon-course__button--receive")}
                                  onClick={() => this.toReceiveCoupon(item.course_id, 'expand')}
                              >
                            <span className="coupon-course__button-price">
                              <em>¥{item.coupon}</em>
                              <i>代金券</i>
                            </span>
                                <span className="coupon-course__button-label">立即领券</span>
                              </a>
                            }

                            {
                              (isFormal === 0 && item.course_status === 2) &&
                              <a className="coupon-course__button">
                            <span className="coupon-course__button-price">
                              <em>¥{item.coupon}</em>
                              <i>代金券</i>
                            </span>
                                <span className="coupon-course__button-label">11.11开始使用</span>
                              </a>
                            }
                            {
                              (isFormal === 1 && item.course_status === 2) &&
                              <a onClick={() => this.toCourse2(item.course_id)} className="coupon-course__button">
                            <span className="coupon-course__button-price">
                              <em>¥{item.coupon}</em>
                              <i>代金券</i>
                            </span>
                                <span className="coupon-course__button-label">开始使用</span>
                              </a>
                            }
                            {
                              item.course_status === 3 &&
                              <a onClick={() => this.toCourse(item.course_id)}
                                 className="course-button"
                                 data-type="study"
                              >开始学习</a>
                            }
                          </div>
                        }
                        {
                          item.type === 1 &&
                          <div className="cent-course__footer">
                            {
                              (item.course_status === 1 || item.course_status === 2) &&
                              <a onClick={() => this.toCourse(item.course_id)} className="course-button">1分钱开团</a>
                            }
                            {
                              item.course_status === 3 &&
                              <a onClick={() => this.toCourse(item.course_id)} className="course-button" data-type="study">开始学习</a>
                            }
                          </div>
                        }
                      </CourseItem>
                  ))
                }
              </div>
              {
                (expand.courseList && expand.courseList.length > 4) &&
                <button className="more-button" onClick={() => this.handleToMore('expand')}>
                  {expand.isMore? '展开更多' : '收起'}
                </button>
              }
            </>
          }
        </div>
    )
  }
}

export default ListFrame(CourseList);
