import React, { Component } from "react"
import { Flex, WingBlank, WhiteSpace, List, Radio, Toast } from "antd-mobile"
import { http, getParam, browser } from "src/utils"
import { HeaderBar } from "src/common/index"
import { Link } from "react-router-dom"
import "./PayOrder.scss"
import { VList } from "src/common"

const RadioItem = Radio.RadioItem

let mockData
if (browser.isWeixin) {
  mockData = [{ value: 1, label: "微信支付", icon: "iconweixinzhifu" }]
} else {
  mockData = [
    { value: 1, label: "微信支付", icon: "iconweixinzhifu" },
    { value: 0, label: "支付宝", icon: "iconalipay" },
    // { value: 2, label: '花呗分期', icon: 'iconhuabei' },
  ]
}

export default class PayOrder extends Component {
  constructor(props) {
    super(props)
    this.state = {
      pay_amount: 0,
      payType: 1,
      stageNumber: 0,
      checkPeriod: false,
      singleMoney: 0,
      periodNumber: 0,
      orderId: getParam("oid"),
      huabei: false,
      fenqiList: [
        {
          value: "zhifubao",
          qishu: "3",
          lilv: "2.30%",
          everyMoney: 300,
          feiyong: 2.3,
        },
        {
          value: "weixin",
          qishu: "6",
          lilv: "4.50%",
          everyMoney: 150,
          feiyong: 4.5,
        },
        {
          value: "huabei",
          qishu: "9",
          lilv: "7.50%",
          everyMoney: 100,
          feiyong: 7.5,
        },
      ],
      categoryList: [],
    }
  }

  // 支付成功后，判断并重定向
  redirectAfterPay = () => {
    // status:0成功，1失败
    const status = getParam("status")
    const type = getParam("type")
    const oid = getParam("oid")
    const { history } = this.props
    if (status || type) {
      if (parseInt(status, 10) === 0) {
        // type订单类型 0普通订单 1团购 2小团 3砍价 4单集购买 5定金课定金 6定金课尾款
        if (parseInt(type, 10) === 2) {
          history.push(`/togroup?id=${oid}`)
        } else if (parseInt(type, 10) === 4) {
          const courseId = window.localStorage.getItem("payCourse")
          courseId && window.localStorage.setItem("payCourse", courseId)
          courseId && history.push(`/detail?id=${courseId}`, { oid })
        } else {
          history.push("/purchased")
        }
      } else {
        Toast.info("支付异常", 2)
      }
    }
  }

  onChange = (value) => {
    this.setState({
      payType: value,
      checkPeriod: false,
    })
    if (value === 2) {
      this.setState({
        huabei: true,
      })
    }
  }
  checkStaging = (item) => {
    // console.log(item);
    this.setState({
      huabei: false,
      stageNumber: item.value,
      singleMoney: item.everyTotal,
      periodNumber: item.stage,
      checkPeriod: true,
    })
  }
  print = (...e) => {
    console.log(e)
  }
  // 确定购买
  pay = () => {
    const { payType, orderId } = this.state
    if (payType === 0) {
      this.alipayPay(orderId)
    } else if (payType === 1) {
      this.weixinPay(orderId)
    }
    // else { // 花呗分期暂时不做
    //     this.huabeiPay(orderId)
    // }
  }
  // 微信支付
  weixinPay = (orderId) => {
    // 微信内部-支付
    if (browser.isWeixin) {
      window.location.href =
        "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx23dac6775ac82877&redirect_uri=" +
        encodeURIComponent(window.location.href + "&aa=bb").toLowerCase() +
        "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"
      // if(window.location.href.indexOf('aa=bb') === -1){
      //     localStorage.setItem('a', '第一次');
      //     window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx23dac6775ac82877&redirect_uri=" + encodeURIComponent(window.location.href + "&aa=bb").toLowerCase() + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
      // }
      // if(window.location.href.indexOf('aa=bb') > 0) {
      //     localStorage.setItem('a', '多次');
      //     let newHref = window.location.href.slice(0, window.location.href.indexOf('aa=bb')-1);
      //     window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx23dac6775ac82877&redirect_uri=" + encodeURIComponent(newHref + "&aa=bb").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) => {
          // console.log(res);
          if (res.data.errno === 0) {
            window.location.href =
              res.data.data.url +
              "&redirect_url=" +
              encodeURIComponent(
                window.location.href + "&weixinpay=1"
              ).toLowerCase()
          } else {
            Toast.info(res.data.msg, 2)
          }
        })
    }
  }
  // 微信内部支付
  isweixinPay = () => {
    let _this = this
    let weixin_code = getParam("code")
    if (weixin_code) {
      if (getParam("oid") !== undefined) {
        http
          .get(
            `${API["base-api"]}/pay/wxpay/pub_charge/oid/${getParam(
              "oid"
            )}/code/${weixin_code}`
          )
          .then((res) => {
            if (res.data.errno === 0) {
              let 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) {
                    // eslint-disable-next-line eqeqeq
                    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"]
                                  }/m/app_order/detail/${getParam("oid")}`
                                )
                                .then((res) => {
                                  if (Number(res.data.data.course_type) === 2) {
                                    _this.props.history.replace(
                                      `/togroup?id=${getParam("oid")}`
                                    )
                                  } else {
                                    // 跳转到已购课程  /purchased 不需要传递任何参数
                                    _this.props.history.replace(`/purchased`)
                                  }
                                })
                            }
                          })
                      }, 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)
            }
          })
      }
    }
  }
  // 支付完成之后获取状态
  payCallback = () => {
    const _this = this
    // 支付回调
    // 定时器轮训获取订单状态
    _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"]}/m/app_order/detail/${getParam("oid")}`)
              .then((res) => {
                if (Number(res.data.data.course_type) === 2) {
                  _this.props.history.replace(`/togroup?id=${getParam("oid")}`)
                } else {
                  // 跳转到已购课程  /purchased 不需要传递任何参数
                  _this.props.history.replace(`/purchased`)
                }
              })
          }
        })
    }, 1000)
  }

  onBridgeReady1 = (data) => {
    let _this = this
    data = data || _this.BridgeData

    WeixinJSBridge.invoke(
      "getBrandWCPayRequest",
      {
        appId: "wx23dac6775ac82877", //公众号名称，由商户传入
        timeStamp: data.timeStamp, //时间戳，自1970年以来的秒数
        nonceStr: data.nonceStr, //随机串
        package: data.package,
        signType: data.signType, //微信签名方式：
        paySign: data.paySign, //微信签名
      },
      function (res) {
        // eslint-disable-next-line eqeqeq
        if (res.err_msg == "get_brand_wcpay_request:ok") {
          Toast.info("支付成功", 2)
          _this.payCallback()
        } else {
          alert("支付失败")
        }
      }
    )
  }
  // 支付宝支付
  alipayPay = (orderId) => {
    http
      .get(`${API["base-api"]}/pay/alipay/wap_charge_new/oid/${orderId}`)
      .then((res) => {
        if (res.data.errno === 0) {
          this.payCallback()
          window.location = res.data.data.url
        } else {
          Toast.info(res.data.msg, 2)
        }
      })
  }
  // 花呗分期 暂时不做
  huabeiPay = (orderId) => {
    const { periodNumber } = this.state

    // console.log('花呗分期支付');
    http
      .get(
        `/pay/alipay/wap_charge/oid/${orderId}/plat/{plat} /hb_num/${periodNumber}`
      )
      .then((res) => {
        // console.log(res);
        if (res.data.errno === 0) {
          window.location = res.data.data.url
        } else {
          Toast.info(res.data.msg, 2)
        }
      })
  }

  componentDidMount() {
    this.redirectAfterPay()
    let data
    if (this.props.location.state && this.props.location.state.group) {
      data = {
        order_id: this.state.orderId,
        type: 2,
      }
    } else {
      data = {
        order_id: this.state.orderId,
      }
    }
    http.post(`${API["base-api"]}/m/order/detail`, data).then((res) => {
      if (res.data.errno !== 200) {
        Toast.info(res.data.msg, 2)
        return
      }
      const { course, pay_amount } = res.data.data
      const fenqiList = []
      ;[1, 2, 3].forEach((item) => {
        let obj = {}
        obj.value = item
        if (item === 1) {
          obj.stage = 3 //期数
          obj.moneyRate = "2.30%" // 分期费率展示
          obj.rate = 0.023 // 分期费率计算
          obj.periodic = (pay_amount / 3).toFixed(2) // 每期本金
        } else if (item === 2) {
          obj.stage = 6 //期数
          obj.moneyRate = "4.50%" // 分期费率展示
          obj.rate = 0.045 // 分期费率计算
          obj.periodic = (pay_amount / 6).toFixed(2) // 每期本金
        } else {
          obj.stage = 12 //期数
          obj.moneyRate = "7.50%" // 分期费率展示
          obj.rate = 0.075 // 分期费率计算
          obj.periodic = (pay_amount / 9).toFixed(2) // 每期本金
        }
        obj.serviceFee = ((pay_amount * obj.rate) / obj.stage).toFixed(2) // 每期的手续费 = 总金额 * 费率 / 期数
        obj.everyTotal = (
          parseFloat(obj.periodic) + parseFloat(obj.serviceFee)
        ).toFixed(2) // 每期总费用 = 每期本金 + 每期手续费
        fenqiList.push(obj)
      })
      // console.log(fenqiList);
      // { value: 'zhifubao',  qishu: '3', lilv: '2.30%', everyMoney: 300, feiyong: 2.3 },
      // { value: 'weixin',  qishu: '6', lilv: '4.50%', everyMoney: 150, feiyong: 4.5 },
      // { value: 'huabei',  qishu: '9', lilv: '7.50%', everyMoney: 100, feiyong: 7.5 },
      this.setState({
        pay_amount,
        categoryList: course,
        fenqiList,
      })
    })
    if (getParam("is_class") === 1 || getParam("weixinpay")) {
      this.payCallback()
    }
    if (browser.isWeixin) {
      this.setState({
        payType: 1,
      })
      this.isweixinPay()
    }
  }

  render() {
    const {
      orderId,
      pay_amount,
      payType,
      checkPeriod,
      singleMoney,
      periodNumber,
      huabei,
      fenqiList,
      categoryList,
      stageNumber,
    } = this.state
    return (
      <div className="pay-order">
        <HeaderBar title="确认支付" arrow={true}></HeaderBar>
        <WhiteSpace size="sm"></WhiteSpace>
        <div className="order-number">
          <WingBlank>
            <Flex justify="between" align="center" style={{ height: "44px" }}>
              <span>订单号</span>
              <span className="number">{orderId}</span>
            </Flex>
          </WingBlank>
        </div>
        <WhiteSpace size="md"></WhiteSpace>
        {categoryList.map((item, index) => {
          const Info = (
            <div className="order-info">
              <p className="order-title text-overflow-one">
                <Link to={`/detail?id=${item.course_id}`}>
                  {item.course_title}
                </Link>
              </p>
              <p className="order-content text-overflow-2">
                {item.simpledescription}
              </p>
              <p className="order-des">
                <span className="order-newprice">¥{item.price1}</span>
                <span className="order-price">¥{item.price0}</span>
              </p>
            </div>
          )
          return (
            <VList
              handleClick={this.print}
              key={index}
              img={item.image_name}
              id={item.course_id}
              info={Info}
            ></VList>
          )
        })}
        <WhiteSpace size="md"></WhiteSpace>
        <div className="order-number">
          <WingBlank>
            <Flex justify="between" align="center" style={{ height: "44px" }}>
              <span>支付金额</span>
              <span className="money">{`￥${pay_amount}`}</span>
            </Flex>
          </WingBlank>
        </div>

        <WhiteSpace size="md"></WhiteSpace>
        <List renderHeader={() => "支付方式"} className="pay-type-list">
          {mockData.map((i) => (
            <RadioItem
              thumb={
                <i
                  className={`iconfont ${i.icon} ${
                    payType === i.value ? "checked" : ""
                  }`}
                ></i>
              }
              key={i.value}
              checked={payType === i.value}
              onChange={() => this.onChange(i.value)}
            >
              {/* {i.label} */}
              {i.value === 2 ? (
                <Flex
                  direction="column"
                  align="start"
                  style={{ width: "100%", marginTop: "6px" }}
                >
                  <Flex
                    direction="row"
                    justify="between"
                    style={{ width: "100%", paddingRight: "30px" }}
                  >
                    <span style={{ color: "#555555", fontSize: "14px" }}>
                      {i.label}
                    </span>
                    {checkPeriod ? (
                      <span
                        style={{
                          color: "#333333",
                          fontSize: "12px",
                        }}
                      >{`${singleMoney}元 × ${periodNumber}期`}</span>
                    ) : null}
                  </Flex>
                  <Flex justify="start">
                    <span style={{ color: "#999999", fontSize: "12px" }}>
                      支付上限受限于您的花呗额度
                    </span>
                  </Flex>
                </Flex>
              ) : (
                i.label
              )}
            </RadioItem>
          ))}
        </List>
        <div className="pay-tip">
          请在15分钟内完成支付，否则届时系统将关闭该订单。
        </div>

        <div className="pay-button" onClick={this.pay}>
          确认支付
        </div>

        {huabei ? (
          <div className="check-staging">
            <div className="container">
              <p className="check-title">请选择分期</p>
              {fenqiList.map((i) => (
                <RadioItem
                  key={i.value}
                  checked={stageNumber === i.value}
                  onChange={() => this.checkStaging(i)}
                >
                  {`${i.everyTotal}元 × ${i.stage}期`}
                  <List.Item.Brief>{`手续费${i.serviceFee}元/期，费率${i.moneyRate}`}</List.Item.Brief>
                </RadioItem>
              ))}
            </div>
          </div>
        ) : null}
      </div>
    )
  }
}
