<route lang="json">
{ "style": { "navigationBarTitleText": "个人设置" } }
</route>
<script setup lang="ts">
import SectionHeading from '@/components/section-heading.vue'
import { useUserStore } from '../../../store'
import { storeToRefs } from 'pinia'
import {
  getUserAuthInfo,
  updateMemberUserInfo,
  getUserBasicInfo,
  updateUserAuthInfo,
} from '../../../core/libs/requests'
import { NetImages } from '../../../core/libs/net-images'
import FormMessageBox from '@/components/form-message-box.vue'
import { useMessage } from 'wot-design-uni'
import { requestToast } from '../../../core/utils/common'
import { DataFormSchema } from '../../../components/data-form'
import dayjs from 'dayjs'

const userStore = useUserStore()
const { userInfo, isDesigner } = storeToRefs(userStore)
const { setUserInfo } = userStore
const { confirm } = useMessage('nickname')
const formData = ref<any>({})
const schema = ref<DataFormSchema>()
const birthday = ref(dayjs().toDate().getTime())
const birthdayShow = ref(false)
const { data: userAuthInfo, run: setUserAuthInfo } = useRequest(() => getUserAuthInfo(), {})
const { data: userBasicInfo, run: setUserBasicInfo } = useRequest(
  () => getUserBasicInfo({ userId: userInfo.value.userId.toString() }),
  {},
)
const handleChooseAvatar = async ({ detail: { avatarUrl } }) => {
  const { data } = await uni.uploadFile({
    url: '/app-api/infra/file/upload',
    filePath: avatarUrl,
    name: 'file',
  })
  const { data: url } = JSON.parse(data)
  console.log(url)

  const { code, msg } = await updateMemberUserInfo({ avatar: url })
  if (code === 0) {
    uni.showToast({
      title: '修改成功',
      icon: 'none',
    })
    setUserInfo({
      ...userInfo.value,
      avatar: url,
    })
    return
  }
  uni.showToast({
    title: msg,
    icon: 'none',
    mask: true,
  })
}
const handleLogout = () => {
  userStore.clearUserInfo()
  uni.reLaunch({
    url: '/pages/home/index',
  })
}
const handleSetNickname = async () => {
  if (isDesigner.value) {
    return false
  }
  formData.value = {
    nickname: userInfo.value.nickname,
  }
  schema.value = { nickname: { type: 'TextField', label: '姓名', props: { type: 'nickname' } } }
  confirm({
    title: '修改姓名',
    beforeConfirm: async ({ resolve }) => {
      const { code } = await requestToast(() => updateMemberUserInfo(formData.value), {
        success: true,
        successTitle: '修改成功',
      })
      if (code === 0) {
        setUserInfo({
          ...userInfo.value,
          nickname: formData.value?.nickname,
        })
        resolve(true)
        formData.value = {}
      }
      resolve(false)
    },
  })
}
const handleSetSex = async () => {
  formData.value = {
    sex: userInfo.value.sex.toString(),
  }
  schema.value = {
    sex: {
      type: 'Radio',
      label: '性别',
      hiddenLabel: true,
      props: {
        columns: [
          { label: '未知', value: '0' },
          { label: '男', value: '1' },
          { label: '女', value: '2' },
        ],
      },
    },
  }
  confirm({
    title: '修改性别',
    beforeConfirm: async ({ resolve }) => {
      const res = await Promise.all([updateMemberUserInfo(formData.value)])
      console.log(res)
      setUserInfo({
        ...userInfo.value,
        sex: formData.value.sex,
      })
      resolve(true)
      formData.value = {}
      uni.showToast({
        title: '修改成功',
        icon: 'none',
        mask: true,
      })
    },
  })
}
const handleSetEmployer = async () => {
  formData.value = {
    employer: userAuthInfo.value.employer,
  }
  schema.value = {
    employer: {
      type: 'TextField',
      label: '公司',
      hiddenLabel: true,
      props: {},
    },
  }
  confirm({
    title: '修改公司',
    beforeConfirm: async ({ resolve }) => {
      const { code } = await requestToast(
        () =>
          updateUserAuthInfo({
            ...userAuthInfo.value,
            employer: formData.value.employer,
          }),
        {
          success: true,
          successTitle: '修改成功',
        },
      )
      if (code === 0) {
        resolve(true)
        formData.value = {}
        setUserAuthInfo()
      }
      resolve(false)
    },
  })
}
const handeleSetBirthday = async () => {
  const { code, data } = await requestToast(
    () =>
      updateMemberUserInfo({
        birthday: dayjs(birthday.value).toDate().getTime(),
      }),
    {
      success: true,
      successTitle: '修改成功',
    },
  )
  if (code === 0) {
    // await setUserBasicInfo()
    setUserInfo({
      ...userInfo.value,
      birthday: dayjs(birthday.value).toDate().getTime(),
    })
    birthdayShow.value = false
  }
}
onMounted(async () => {
  await setUserAuthInfo()
  if (isDesigner.value) {
    await Promise.all([setUserBasicInfo()])
    console.log(userBasicInfo.value)
  }
  birthday.value = userInfo.value.birthday || dayjs().toDate().getTime()
})
</script>
<template>
  <div class="flex-grow bg-white flex flex-col p-4.5 gap-8">
    <div class="flex flex-col items-center">
      <button
        class="p-0 leading-0 bg-transparent after:b-none"
        open-type="chooseAvatar"
        @chooseavatar="handleChooseAvatar"
      >
        <wd-img
          round
          width="97"
          height="97"
          :src="(userInfo.avatar ?? '') === '' ? NetImages.DefaultAvatar : userInfo.avatar"
          custom-class="border border-white border-solid"
        ></wd-img>
      </button>
      <div
        class="mt-2 text-center text-black/40 text-xs font-normal font-['PingFang_SC'] leading-none"
      >
        更换头像
      </div>
    </div>
    <button
      class="w-full p-0 leading-0 bg-transparent hover:bg-transparent after:b-none"
      @click="handleSetNickname"
    >
      <SectionHeading
        title="姓名"
        size="sm"
        :end-text="userInfo.nickname"
        :end-arrow="!isDesigner"
      ></SectionHeading>
    </button>
    <template v-if="isDesigner">
      <div @click="handleSetSex">
        <SectionHeading
          title="性别"
          size="sm"
          :end-text="{ '0': '未知', '1': '男', '2': '女' }[String(userInfo.sex)] ?? '设置'"
          end-arrow
        ></SectionHeading>
      </div>
      <div class="relative" @click="birthdayShow = true">
        <SectionHeading
          title="生日"
          size="sm"
          :end-text="
            (userInfo.birthday ?? '') === ''
              ? '设置'
              : dayjs(userInfo.birthday).format('YYYY-MM-DD')
          "
          end-arrow
        ></SectionHeading>
      </div>
      <!-- <div class="absolute left-0 top-0 w-full h-full opacity-" style="visibility: hidden">
          <wd-datetime-picker type="date" v-model="birthday" custom-class=""></wd-datetime-picker>
        </div> -->
    </template>
    <SectionHeading
      title="手机号"
      size="sm"
      :end-text="userInfo?.mobile"
      :end-arrow="true"
      path="/pages-sub/mine/setting/mobile/index"
    ></SectionHeading>
    <template v-if="isDesigner">
      <div @click="handleSetEmployer">
        <SectionHeading
          title="公司"
          size="sm"
          :end-text="userAuthInfo?.employer"
          end-arrow
        ></SectionHeading>
      </div>
      <SectionHeading title="推荐人" size="sm" :end-text="userAuthInfo?.referrer"></SectionHeading>
      <SectionHeading
        title="经纪人"
        size="sm"
        :end-text="userBasicInfo?.brokerName"
      ></SectionHeading>
    </template>
    <div class="flex-1"></div>
    <div><wd-button block :round="false" @click="handleLogout">退出登录</wd-button></div>
    <FormMessageBox v-model="formData" selector="nickname" :schema="schema"></FormMessageBox>
    <wd-action-sheet v-model="birthdayShow" title="设置生日">
      <!-- <view style="padding: 15px 15px 150px 15px"> -->
      <wd-datetime-picker-view
        type="date"
        v-model="birthday"
        :minDate="dayjs().subtract(80, 'y').toDate().getTime()"
        :maxDate="dayjs().toDate().getTime()"
        label="年月日"
      />
      <!-- </view> -->
      <div class="px-4 pb-4">
        <wd-button block :round="false" @click="handeleSetBirthday">确定</wd-button>
      </div>
    </wd-action-sheet>
  </div>
</template>
<style lang="scss">
.aaaa {
  &:after {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    content: '';
    background: #03f463;
    border-radius: 10px;
    transform: skewX(15deg);
  }
  &::before {
    position: absolute;
    top: 0;
    right: -13px;
    width: 100px;
    height: 64px;
    content: '';
    background: orange;
    border-radius: 10px;
  }
}
</style>
