import { defineStore } from 'pinia'
import { useUserStore } from './user'
import type { LockInfo } from '@/types/store'

import { LOCK_INFO_KEY } from '@/enums/cacheEnum'
import { Persistent } from '@/utils/cache/persistent'

interface LockState {
  lockInfo: Nullable<LockInfo>
}

export const useLockStore = defineStore('app-lock', {
  state: (): LockState => ({
    lockInfo: Persistent.getLocal(LOCK_INFO_KEY),
  }),
  getters: {
    getLockInfo(state): Nullable<LockInfo> {
      return state.lockInfo
    },
  },
  actions: {
    setLockInfo(info: LockInfo) {
      this.lockInfo = Object.assign({}, this.lockInfo, info)
      Persistent.setLocal(LOCK_INFO_KEY, this.lockInfo, true)
    },
    resetLockInfo() {
      Persistent.removeLocal(LOCK_INFO_KEY, true)
      this.lockInfo = null
    },
    // Unlock
    async unLock(password?: string) {
      const userStore = useUserStore()
      if (this.lockInfo?.pwd === password) {
        this.resetLockInfo()
        return true
      }
      const tryLogin = async () => {
        // TODO 滑块验证码
        try {
          const username = userStore.getUserInfo?.user.nickname
          const res = await userStore.login({
            username,
            password: password!,
            goHome: false,
            mode: 'none',
            captchaVerification: '',
          })
          if (res)
            this.resetLockInfo()

          return res
        }
        catch (error) {
          return false
        }
      }
      return await tryLogin()
    },
  },
})
