import React, { Component } from "react"
import { http } from "src/utils"
import { Formik, Form, Field } from "formik"
import { Toast } from "antd-mobile"
import "./index.scss"

class AddressPopup extends Component {
  constructor(props) {
    super(props)
    this.state = {
      isLoading: false,
      addressInfo: {
        name: "",
        phone: "",
        address: "",
      },
    }
  }

  componentDidMount() {
    this.fetchUserAddress()
  }

  // 获取收货信息
  fetchUserAddress = () => {
    const { addressInfo } = this.state
    http.get(`${API.home}/sys/user_address_info`).then((res) => {
      const { code, data } = res.data
      if (code === 200) {
        this.setState({
          addressInfo: Object.assign({}, addressInfo, {
            name: data.name,
            phone: data.phone,
            address: data.address,
          }),
          isLoading: true,
        })
      }
    })
  }

  handleToSubmit = (params = {}) => {
    const { successBindAddress } = this.props
    http
      .post(`${API.home}/sys/update_address`, {
        act_type: "treasure",
        ...params,
      })
      .then((res) => {
        const { code, msg } = res.data
        if (code === 200) {
          successBindAddress()
        } else {
          Toast.info(msg, 2, null, false)
        }
      })
  }

  render() {
    const { isLoading, addressInfo } = this.state
    const { tip, prize, skip = "default" } = this.props
    return (
      <>
        {isLoading && (
          <Formik
            initialValues={{
              ...addressInfo,
            }}
            validate={({ name, phone, address }) => {
              const errors = {}

              if (!name) {
                errors.name = "请输入收件人"
              }
              if (!/^1[3-9]\d{9}$/.test(phone)) {
                errors.phone = "请填写正确格式的手机号"
              }
              if (!address) {
                errors.address = "请输入收货地址"
              }

              return errors
            }}
            validateOnBlur={false}
            validateOnChange={false}
            onSubmit={(values) => {
              this.handleToSubmit(values)
            }}
          >
            {({ errors }) => (
              <Form className="address-form" data-skip={skip}>
                <h2 className="address-form__title">收货信息</h2>
                {prize ? (
                  <p className="address__prize">
                    您抽中了
                    <span style={{ color: "#FF4000" }}>{prize}</span>
                  </p>
                ) : null}
                {tip ? (
                  <div className="address-form__subtitle">{tip}</div>
                ) : (
                  <p className="address-form__desc">
                    请及时填写收货信息,获得实物奖品后将第一时间为您邮寄
                  </p>
                )}
                <Field
                  name="name"
                  render={({ field }) => (
                    <div className="address-form__item">
                      <input
                        {...field}
                        className="address-form__ipt"
                        type="text"
                        placeholder="收件人"
                      />
                      {errors.name && (
                        <p className="address-form__tip">{errors.name}</p>
                      )}
                    </div>
                  )}
                />
                <Field
                  name="phone"
                  render={({ field }) => (
                    <div className="address-form__item">
                      <input
                        {...field}
                        className="address-form__ipt"
                        type="text"
                        placeholder="联系方式"
                      />
                      {errors.phone && (
                        <p className="address-form__tip">{errors.phone}</p>
                      )}
                    </div>
                  )}
                />
                <Field
                  name="address"
                  render={({ field }) => (
                    <div className="address-form__item">
                      <input
                        {...field}
                        className="address-form__ipt"
                        type="text"
                        placeholder="收货地址"
                      />
                      {errors.address && (
                        <p className="address-form__tip">{errors.address}</p>
                      )}
                    </div>
                  )}
                />
                <button
                  className="address-form__submit"
                  data-status="do"
                  type="submit"
                >
                  提交
                </button>
              </Form>
            )}
          </Formik>
        )}
      </>
    )
  }
}

export default AddressPopup