import {
    createStoreBindings
} from 'mobx-miniprogram-bindings'
import {
    store
} from '~/store/index'
import {
    setUserInfo,
    exchangePhone,
    getMyInfo,
    bindPhone
} from '~/api/user'
import event from '~/mixins/event'
let storeBindings
Page({
    behaviors: [event],
    data: {
        gradeIndex: 0,
        gradeArray: [{
                value: 'PRESCHOOL',
                key: '学前班'
            }, {
                value: 'PRIMARY_FIRST_GRADE',
                key: '一年级'
            },
            {
                value: 'PRIMARY_SECOND_GRADE',
                key: '二年级'
            },
            {
                value: 'PRIMARY_THREE_GRADE',
                key: '三年级'
            },
            {
                value: 'PRIMARY_SENIOR_GRADE',
                key: '四年级'
            }, {
                value: 'PRIMARY_FIVE_GRADE',
                key: '五年级'
            }, {
                value: 'PRIMARY_SIX_GRADE',
                key: '六年级'
            },
        ],
    },
    onLoad(options) {
        // 手工绑定 
        this.storeBindings = createStoreBindings(this, {
            store,
            fields: {
                userInfo: 'userInfo'
            },
            actions: {
                setUser: 'setUser'
            }
        })
        // 立刻更新
        this.storeBindings.updateStoreBindings()
        let {
            grade
        } = this.data.userInfo
        let gradeIndex = this.data.gradeArray.findIndex(item => {
            return item.value == grade
        })
        this.setData({
            gradeIndex
        })

    },
    // 调用清理函数
    onUnload() {
        this.storeBindings.destroyStoreBindings()
    },
    changeAvatar(e) {
        const {
            avatarUrl
        } = e.detail
        wx.uploadFile({
            url: 'https://reader-api.ai160.com/file/upload',
            filePath: avatarUrl,
            name: '头像',
            header: {
                uid: wx.getStorageSync('uid')
            },
            success: (res) => {
                const newAvatar = JSON.parse(res.data).data;
                const str = 'userInfo.avatar'
                this.setData({
                    [str]: newAvatar
                })
                this.setUserInfo({
                    avatar: newAvatar
                })
            }
        })
    },
    saveNickName(e) {
        let nickName = e.detail.value;
        if (nickName == this.data.userInfo.nickName) {
            return
        } else if (!nickName) {
            return this.setData({
                ['userInfo.nickName']: this.data.userInfo.nickName
            })
        }
        this.setUserInfo({
            nickName
        })
    },
    selectProfession() {
        wx.showActionSheet({
            itemList: ['学生', '家长', '老师'],
            success: (res) => {
                if (['学生', '家长', '老师'][res.tapIndex] == this.data.userInfo.profession) {
                    return
                }
                this.setUserInfo({
                    profession: ['学生', '家长', '老师'][res.tapIndex]
                })
            },
        })
    },
    selectGender() {
        wx.showActionSheet({
            itemList: ['女', '男'],
            success: (res) => {
                if (res.tapIndex == this.data.userInfo.gender) {
                    return
                }
                this.setUserInfo({
                    gender: res.tapIndex
                })
            },
        })
    },
    bindDateChange(e) {
        this.setUserInfo({
            birthday: e.detail.value
        })
    },
    bindGradeChange(e) {
        let grade = this.data.gradeArray[e.detail.value].value
        this.setUserInfo({
            grade
        })
    },
    saveSchool(e) {
        let schoolName = e.detail.value;
        if (schoolName == this.data.userInfo.schoolName) {
            return
        }
        this.setUserInfo({
            schoolName
        })
    },
    async setUserInfo(data) {
        wx.showLoading({
            title: '提交中',
        })
        let res = await setUserInfo(data, 'put').finally(() => {
            wx.hideLoading()
        })
        this.setUser(res)
    },
    async getPhoneNumber({
        detail
    }) {
        let mobile = await exchangePhone({
            code: detail.code
        })
        await bindPhone({
            mobile
        })
        let userInfo = await getMyInfo()
        this.setUser(userInfo.user)
        wx.showToast({
            title: '绑定成功!',
            icon: "none",
            duration: 4000
        })
    },
})