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

@connect((state) => ({
  user: state.user,
}))
class PythonDes extends Component {
  constructor(props) {
    super(props)
    this.state = {
      syllabus: [], // 阶梯学习
      allSyllabus: [], // 阶梯学习
      allSyllabusShow: false,
      practice: [], // 课后实操
      allPractice: [], // 课后实操
      allPracticeShow: false,
      toApp: false,
      defineList: [
        {
          titleUrl: "https://cdn.julyedu.com/h5_python_class/trophy.png",
          title: "排名第1的编程语言",
          subTitle: "2018世界编程语言排行榜中，Python排名第1",
          subWidth: "180px",
          bottomUrl: "https://cdn.julyedu.com/h5_python_class/program_lan.png",
          desInfo: {
            width: "240px",
            height: "170px",
          },
        },
        {
          titleUrl: "https://cdn.julyedu.com/h5_python_class/kaifa.png",
          title: "开发快速、简单易掌握",
          subTitle: "严谨的代码编写格式，语法格式简单易理解完成一个相同的任务",
          subWidth: "260px",
          bottomUrl: "https://cdn.julyedu.com/h5_python_class/kuaisu.png",
          desInfo: {
            width: "212px",
            height: "106px",
          },
        },
        {
          titleUrl: "https://cdn.julyedu.com/h5_python_class/lingyu.png",
          title: "适用领域广",
          subTitle: "Python工程师可从事多领域编程工作，人才年需求增长6倍",
          subWidth: "230px",
          bottomUrl: "https://cdn.julyedu.com/h5_python_class/jiandan.png",
          desInfo: {
            width: "234px",
            height: "106px",
          },
        },
      ],
      desList: [
        {
          url: "https://cdn.julyedu.com/h5_python_class/xingshi.png",
          title: "全新课程形式",
          subTitle: "对话式交互教学，轻松、生动、不无聊",
        },
        {
          url: "https://cdn.julyedu.com/h5_python_class/huanjing.png",
          title: "在线编程环境",
          subTitle: "无需安装任何编程软件",
        },
        {
          url: "https://cdn.julyedu.com/h5_python_class/rumen.png",
          title: "17天零基础入门",
          subTitle: "降低学习门槛，17天入门人工智能",
        },
      ],
      worryList: [
        {
          url: "https://cdn.julyedu.com/h5_python_class/jiechu.png",
          title: "初次接触，担心学不会",
          subTitle:
            "本课程专门为零基础的你打造，全篇通过最白话沟通交流的方式进行讲解，无论你有无编程经验都可以轻松理解并且掌握。",
        },
        {
          url: "https://cdn.julyedu.com/h5_python_class/xuexi.png",
          title: "想学习，没有坚持下来",
          subTitle:
            "以故事性的方式编写学习内容， 把生硬的知识点有趣化。精美的图片+幽默的文字+代码编写让你越学越想学。",
        },
        {
          url: "https://cdn.julyedu.com/h5_python_class/zhishidian.png",
          title: "知识点掌握了，不知如何运用",
          subTitle:
            "每节课的知识点都设有代码编写部分，每节课课后都有课后实操。有多次代码编写练习的机会，助你真正学以致用。",
        },
      ],
      payMoney: 0,
      isOnline: true, //课程是否上架
      courseInfo: {},
    }
  }

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

  // 立即体验、免费试学
  tryLearn = () => {
    // 已登录
    if (!this.props.user.hasError) {
      this.toLearn()
    } else {
      // 未登录
      this.toLogin()
    }
  }

  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
      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 = () => {
    http
      .get(`${API["home"]}/web/it_detail?course_id=${getParam("id")}`)
      .then((res) => {
        const { code, data, msg } = res.data
        if (code == 200) {
          this.setState({
            syllabus: data.syllabus.slice(0, 2),
            allSyllabus: data.syllabus,
            practice: data.practice.slice(0, 2),
            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)
    }
  }

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

  render() {
    const {
      defineList,
      desList,
      worryList,
      syllabus,
      practice,
      allSyllabusShow,
      allPracticeShow,
      toApp,
      payMoney,
      isOnline,
      courseInfo,
    } = this.state
    console.log(courseInfo)
    return (
      <div className={"python__des"}>
        <div className={"des__start"}></div>
        {!!courseInfo.is_dist && <ShareRank courseInfo={courseInfo} />}
        <div className={"python__define"}>
          <img
            className={"left__decorate"}
            src={"https://cdn.julyedu.com/h5_python_class/left__decorate.png"}
          ></img>
          <img
            className={"right__decorate"}
            src={"https://cdn.julyedu.com/h5_python_class/right__decorate.png"}
          ></img>
          <p className={"define__title"}>什 / 么 / 是 / Python</p>
          {defineList.map((item, index) => {
            return <DefineItem item={item} key={index}></DefineItem>
          })}
        </div>
        <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}>
                免费试学
              </div>
              <div className={"sign__now"} onClick={this.signUp}>
                立即报名
              </div>
            </div>
          </div>
        ) : (
          <div className="bottom__btn_group">
            <p className="online__label">Python人工智能</p>
            <button className="online__button">即将上架 敬请期待</button>
          </div>
        )}

        {/* 课程介绍 */}
        <Description list={desList} />

        <NoWorry list={worryList}></NoWorry>

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

        {/* 课后实操 */}
        <Test
          practice={practice}
          allPracticeShow={allPracticeShow}
          show={this.showAll}
          hide={this.hideSome}
        />
        <Team />

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

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

function DefineItem(props) {
  const {
    item,
    item: { desInfo },
  } = props
  return (
    <div className={"number_one"}>
      <img className={"trophy"} src={item.titleUrl}></img>
      <p className={"item__title"}>{item.title}</p>
      <p className={"item__subtitle"} style={{ width: item.subWidth }}>
        {item.subTitle}
      </p>
      <img
        style={{ width: desInfo.width, height: desInfo.height }}
        src={item.bottomUrl}
      ></img>
    </div>
  )
}

export default PythonDes
