/* eslint-disable jsx-a11y/alt-text */
import React, { Component } from "react"
import "./index.scss"
import Description from "./Description/index.js"
import Study from "./Study/index.js"
import Team from "./Team/index.js"
import Experience from "./Experience/index.js"
import Progream from "./Progream/index.js"
import Selection from "./Selection"
import Mask from "./../poup/index.js"
import InAction from "./InAction"
import ShareRank from "src/components/detail/shareRank"
import { http, getParam, SendMessageToApp, browser } from "src/utils"
import { connect } from "react-redux"
import { Toast } from "antd-mobile"
import { CallApp } from "src/common/index"

@connect((state) => ({
  user: state.user,
}))
class PythonDes extends Component {
  constructor(props) {
    super(props)
    this.state = {
      syllabus: [], // 阶梯学习
      allSyllabus: [], // 阶梯学习
      allSyllabusShow: false,
      allPractice: [], // 课后实操
      toApp: false,
      payMoney: 0,
      isOnline: true, //课程是否上架
      courseInfo: {},
      isShowChannel: window.sessionStorage.getItem("isShowSiteWindowByChannel"),
      orderId: "",
    }
  }

  // 立即报名
  signUp = () => {
    this.statistics(3)
    // 已登录
    if (!this.props.user.hasError) {
      this.toDetail()
    } else {// 未登录
      this.toLogin()
    }
  }

  // 立即体验type=1、立即报名type=3、9.9特价试学type=2
  tryLearn = (type) => {
    this.statistics(type)
    // 已登录
    if (!this.props.user.hasError) {
      this.creatOid(type)
    } else {
      // 未登录
      this.toLogin()
    }
  }
  creatOid = (type) => {
    let url = ""
    if (Number(type) === 3) {
      url = `${API["base-api"]}/sys/it_baoming/create`
    } else {
      url = `${API["base-api"]}/sys/trial_create`
    }
    http.post(url, { course_id: getParam("id") }).then((res) => {
      const { errno, data, msg } = res.data
      if (errno === 200) {
        this.setState({
          orderId: data.oid,
        })
        this.weixinPay(data.oid)
      } else {
        Toast.info(msg, 2)
      }
    })
  }
  // 微信支付
  weixinPay = (orderId) => {
    // 微信内部-支付
    if (browser.isWeixin) {
      let url =
        window.location.origin +
        window.location.pathname +
        "?id=" +
        getParam("id")
      window.location.href =
        "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx23dac6775ac82877&redirect_uri=" +
        encodeURIComponent(url + "&aa=bb&oid=" + orderId).toLowerCase() +
        "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"
    } else {
      // 微信外部-支付
      http
        .get(`${API["base-api"]}/pay/wxpay/wap_charge/oid/${orderId}`)
        .then((res) => {
          if (res.data.errno === 0) {
            window.location.href =
              res.data.data.url +
              "&redirect_url=" +
              encodeURIComponent(
                window.location.href + "&weixinpay=1&oid=" + orderId
              ).toLowerCase()
          } else {
            Toast.info(res.data.msg, 2)
          }
        })
    }
  }

  toLearn = () => {
    const { backwardVersion } = this.props
    http
      .post(`${API["home"]}/m/it/user/trialCourse`, {
        course_id: getParam("id"),
      })
      .then((res) => {
        const { code, msg } = res.data
        if (code === 200) {
          if (!getParam("version")) {
            // H5
            this.setState({
              toApp: true,
            })
          } else {
            // APP
            if (backwardVersion) {
              Toast.info(
                "当前版本不支持该课程模式，请升级到最新版本或前往PC端体验",
                2
              )
            } else {
              SendMessageToApp("toLearn", getParam("id"))
            }
          }
        } else {
          Toast.info(msg, 2)
        }
      })
  }

  closePop = () => {
    this.setState({
      toApp: false,
    })
  }

  toDetail = () => {
    const { backwardVersion } = this.props
    const id = getParam("id")
    if (!getParam("version")) {
      // H5
      http
        .get(`${API["base-api"]}/m/cart/addtopreorder/[${id}]`)
        .then((res) => {
          if (res.data.errno === 0) {
            this.props.history.push(`/order?id=${id}`, { simple: 1 })
          } else {
            Toast.info(res.data.msg, 2)
          }
        })
    } else {
      // APP
      if (backwardVersion) {
        Toast.info(
          "当前版本不支持该课程模式，请升级到最新版本或前往PC端购买",
          2
        )
        let onlyoneUse = setTimeout(() => {
          clearTimeout(onlyoneUse)
          onlyoneUse = null
          SendMessageToApp("toPay", id)
        }, 2000)
      } else {
        SendMessageToApp("toPay", id)
      }
    }
  }

  toLogin = () => {
    if (!getParam("version")) {
      // H5
      if (browser.isWeixin) {
        this.props.isWxloginFun(true)
      } else {
        this.props.history.push("/passport")
      }
    } else {
      // APP
      SendMessageToApp("toLogin")
    }
  }

  showAll = (key) => {
    if (key === 1) {
      this.setState({
        syllabus: this.state.allSyllabus,
        allSyllabusShow: true,
      })
    }
    if (key === 2) {
      this.setState({
        practice: this.state.allPractice,
        allPracticeShow: true,
      })
    }
  }
  hideSome = (key) => {
    if (key === 1) {
      this.setState({
        syllabus: this.state.allSyllabus.slice(0, 2),
        allSyllabusShow: false,
      })
    }
    if (key === 2) {
      this.setState({
        practice: this.state.allPractice.slice(0, 2),
        allPracticeShow: false,
      })
    }
  }

  getStatus = () => {
    const { buyTry } = this.props

    http
      .get(
        `${API["home"]}/web/it_detail?course_id=${getParam(
          "id"
        )}&buy_try=${buyTry}`
      )
      .then((res) => {
        const { code, data, msg } = res.data
        if (code === 200) {
          this.setState({
            syllabus: data.syllabus.slice(0, 2),
            allSyllabus: data.syllabus,
            allPractice: data.practice,
            payMoney: data.course_info.price1,
            courseInfo: data.course_info,
          })
        } else {
          Toast.info(msg)
        }
      })
  }

  componentDidMount() {
    this.getStatus()

    const { backwardVersion, isPay } = this.props
    if (backwardVersion && isPay === 1) {
      Toast.info("当前版本不支持该课程模式，请升级到最新版本或前往PC端学习", 2)
    }
  }

  // 统计
  statistics = (type) => {
    http.post(`${API.home}/web/it_click_num/${getParam("id")}`, { type })
  }

  shouldComponentUpdate(nextProps, nextState, nextContext) {
    if (this.props.isAppUpdate !== nextProps.isAppUpdate) {
      this.getStatus()
      return false
    }
    return true
  }

  render() {
    const {
      syllabus,
      allSyllabusShow,
      toApp,
      payMoney,
      isOnline,
      courseInfo,
    } = this.state
    return (
      <div className={"python__des"}>
        <div className={"des__start"}></div>
        {!!courseInfo.is_dist && <ShareRank courseInfo={courseInfo} />}
        <div className={"course__introduce"}></div>
        {isOnline ? (
          <div className={"bottom__btn_group"}>
            <div className={"course__price"}>
              <div className={"money"}>
                {payMoney}
                <span style={{ fontSize: "18px" }}>元</span>
              </div>
              <div className={"discount"}>
                限时特惠
                <div className={"triangle"}></div>
              </div>
            </div>

            <div className={"btn__group"}>
              <div
                className={"try__study"}
                onClick={() => {
                  // this.tryLearn(3)
                  this.signUp()
                }}
              >
                立即报名
              </div>
              <div
                className={"sign__now"}
                onClick={() => {
                  this.tryLearn(2)
                }}
              >
                9.9特价试学
              </div>
            </div>
          </div>
        ) : (
          <div className="bottom__btn_group">
            <p className="online__label">Python人工智能</p>
            <button className="online__button">即将上架 敬请期待</button>
          </div>
        )}

        {Number(this.state.isShowChannel) === 1 && (
          <CallApp className="toapp" />
        )}
        {/* 课程介绍 */}
        <Description />

        <Study
          syllabus={syllabus}
          allSyllabusShow={allSyllabusShow}
          show={this.showAll}
          hide={this.hideSome}
        ></Study>

        {/*精选习题*/}
        <Selection />

        {/*项目实战*/}
        <InAction />

        <Team />

        {/* 试学体验 */}
        <Experience tryLearn={this.tryLearn} isOnline={isOnline} />
        <img
          style={{
            display: "block",
            width: "100%",
            height: "8px",
          }}
          src="https://cdn.julyedu.com/mlCourse/m/di.png"
          alt=""
        />

        {/* 常见问题 */}
        <Progream />
        {toApp && <Mask type={1} closePop={this.closePop} />}
      </div>
    )
  }
}

export default PythonDes
