import Taro, { Component, Config } from '@tarojs/taro';
import { ComponentClass } from 'react';
import { View, Image, Text, Input, Picker, Button } from '@tarojs/components';
import ToastBox from '../../components/ToastBox/ToastBox';

import UserHeaderM from '../../images/home/img_boy_touxiang@2x.png';
import UserHeaderF from '../../images/home/img_girl_touxiang@2x.png';
import InfoIcon from '../../images/user/pc_minel_icon@2x.png';
import SchoolIcon from '../../images/user/pc_school_icon@2x.png';
import radioIcon from '../../images/login/pc_nor_icon@2x.png';
import radioCheckIcon from '../../images/login/pc_sel_icon@2x.png';
import './UserSetting.scss';
import { connect } from '@tarojs/redux';
import { updateUserInfo } from '../../store/rootReducers/userinfo';
import { perfectionUserInfo } from '../../api/customer';
import { Customer } from '../../types/Customer/Customer';
import { shareHandle } from '@/common/shareMethod';

type UpdateParams = {
  customerId: number;
  customerName: string;
  customerSex: string;
  birthDay: string;
  studentNo: string;
  entranceDate: string;
};
type PageStateProps = {
  userinfo: Customer;
};
type PageDispatchProps = {
  updateUserInfo: (e: UpdateParams) => void;
};
type PageOwnProps = {};
type PageState = {
  birthDay: string;
  customerHead: string;
  customerName: string;
  customerSex: string;
  entranceDate: string;
  studentNo: string;
};
type IProps = PageStateProps & PageDispatchProps & PageOwnProps;
interface UserSetting {
  props: IProps;
  state: PageState;
}

@connect(
  ({ userinfo }) => ({
    userinfo,
  }),
  dispatch => ({
    updateUserInfo(entity: UpdateParams) {
      dispatch(updateUserInfo(entity));
    },
  }),
)
class UserSetting extends Component {
  config: Config = {
    navigationBarBackgroundColor: '#6180f4',
    navigationBarTitleText: '',
  };
  constructor(props: IProps) {
    super(props);
    const {
      userinfo: {
        birthDay,
        customerHead,
        customerName,
        customerSex,
        entranceDate,
        studentNo,
      },
    } = props;
    this.state = {
      birthDay: birthDay ? birthDay.split(' ')[0] : '',
      customerHead: customerHead ? customerHead : '',
      customerName: customerName ? customerName : '',
      customerSex: customerSex ? customerSex : '',
      entranceDate: entranceDate ? entranceDate.split(' ')[0] : '',
      studentNo: studentNo ? studentNo : '',
    };
  }
  onShareAppMessage = shareHandle;

  validateSaveForm(): boolean {
    const { customerName } = this.state;
    if (!customerName) {
      Taro.showToast({
        title: '请输入姓名',
      });
      return false;
    }
    return true;
  }
  saveHandle() {
    if (this.validateSaveForm()) {
      Taro.showLoading();
      const {
        userinfo: { customerId },
        updateUserInfo,
      } = this.props;
      const {
        customerName,
        customerSex,
        birthDay,
        studentNo,
        entranceDate,
      } = this.state;
      const entity = {
        customerId: customerId,
        customerName,
        customerSex,
        birthDay,
        studentNo,
        entranceDate,
      };
      perfectionUserInfo(entity)
        .then(() => {
          Taro.hideLoading();
          updateUserInfo(entity);
          this.refs.ToastBox.showToast('已保存');
        })
        .catch(err => {
          console.log(err);
          Taro.showToast({
            title: err.msg || '保存失败',
            icon: 'none',
          });
        });
    }
  }

  render() {
    const { userinfo } = this.props;
    const {
      customerName,
      customerSex,
      birthDay,
      studentNo,
      entranceDate,
    } = this.state;
    return (
      <View className='UserSetting'>
        <ToastBox ref='ToastBox' />
        <View className='UserSetting-Header'>
          <View className='UserSetting-HeaderIconBox'>
            {userinfo.customerSex === '1' ? (
              <Image className='UserSetting-HeaderIcon' src={UserHeaderM} />
            ) : (
              <Image className='UserSetting-HeaderIcon' src={UserHeaderF} />
            )}
          </View>
        </View>
        <View className='UserSetting-name'>{userinfo.customerName}</View>
        <View className='UserSetting-Content'>
          <View className='UserSetting-title'>
            <Image className='UserSetting-titleIcon' src={InfoIcon} />
            <Text>我的信息</Text>
            <View className='UserSetting-titleLine' />
          </View>
          <View className='UserSetting-ContentItem'>
            <Text>姓名:</Text>
            <Input
              className='UserSetting-ContentItem-input'
              maxLength={20}
              value={customerName}
              onInput={({ detail: { value } }) => {
                this.setState({
                  customerName: value.trim(),
                });
                return value.trim();
              }}
            />
          </View>
          <View className='UserSetting-ContentItem'>
            <Text>性别:</Text>
            <View className='loginBox-input sexBox'>
              <View
                className='sexBox-item'
                onClick={() =>
                  this.setState({
                    customerSex: '2',
                  })
                }>
                {customerSex === '2' ? (
                  <Image className='sexBox-icon' src={radioCheckIcon} />
                ) : (
                  <Image className='sexBox-icon' src={radioIcon} />
                )}
                <Text>女</Text>
              </View>
              <View
                className='sexBox-item'
                onClick={() =>
                  this.setState({
                    customerSex: '1',
                  })
                }>
                {customerSex === '1' ? (
                  <Image className='sexBox-icon' src={radioCheckIcon} />
                ) : (
                  <Image className='sexBox-icon' src={radioIcon} />
                )}
                <Text>男</Text>
              </View>
            </View>
          </View>
          <View className='UserSetting-ContentItem'>
            <Text>出生日期:</Text>
            <Picker
              value={birthDay}
              mode='date'
              onChange={({ detail: { value } }) =>
                this.setState({
                  birthDay: value,
                })
              }>
              {birthDay ? (
                <View>{birthDay}</View>
              ) : (
                <View className='UserSetting-placeholder'>
                  {'请选择出生日期'}
                </View>
              )}
            </Picker>
          </View>
          <View className='UserSetting-ContentItem Disabled'>
            <Text>多彩账号:</Text>
            <Text>15961654</Text>
          </View>
          <View className='UserSetting-ContentItem Disabled'>
            <Text>设备账号:</Text>
            <Text>1855</Text>
          </View>
          <View className='UserSetting-title'>
            <Image className='UserSetting-titleIcon' src={SchoolIcon} />
            <Text>学校信息</Text>
            <View className='UserSetting-titleLine' />
          </View>
          <View className='UserSetting-ContentItem Disabled'>
            <Text>学校:</Text>
            <Text>{userinfo.areaName}</Text>
          </View>
          <View className='UserSetting-ContentItem'>
            <Text>学号:</Text>
            <Input
              className='UserSetting-ContentItem-input'
              value={studentNo}
              placeholderClass='UserSetting-placeholder'
              placeholder='请输入学号'
              onInput={({ detail: { value } }) => {
                this.setState({
                  studentNo: value.trim(),
                });
                return value.trim();
              }}
            />
          </View>
          <View className='UserSetting-ContentItem'>
            <Text>入学日期:</Text>
            <Picker
              value={entranceDate}
              mode='date'
              onChange={({ detail: { value } }) =>
                this.setState({
                  entranceDate: value,
                })
              }>
              {entranceDate ? (
                <View>{entranceDate}</View>
              ) : (
                <View className='UserSetting-placeholder'>
                  {'请选择入学日期'}
                </View>
              )}
            </Picker>
          </View>
        </View>
        <Button className='UserSetting-save' onClick={this.saveHandle}>
          保存
        </Button>
      </View>
    );
  }
}

export default UserSetting as ComponentClass<PageOwnProps, PageState>;