import webapi from './webapi'
import { commit } from '@ttk/app-loader'
import * as validator from '@/utils/validator'

// 定义需要校验的字段和校验规则, 支持同一个字段多条规则和异步校验，详情可参考
// https://github.com/yiminghe/async-validator
const rules = {
  username: [{ type: 'string', required: true, message: '请输入登录名'}],
  password: [{ type: 'string', required: true, message: '请输入你的密码'}],
}

// 初始化表单
export function initForm(reduce, gf, param) {
  return async (dispatch, getState) => {
    let data = param
    if (data.id) {
      data = await webapi.attributeForm(param)
    }
    reduce('attributeForm', { type: 'update', data })
  }
}

export function loginAction(reduce, gf, data) {
  return async (dispatch, getState) => {
    const res = await webapi.login({ ...data, loginName: data.username || null })
    // 如果存在secInnerAccountDTOS属性，证明这个用户有多个系统的权限。
    if (res && res.secInnerAccountDTOS) {
      return { secInnerAccountDTOS: res.secInnerAccountDTOS, loginId: res.loginId }
    }
    await dispatch(commit('app-root/loginInfo', res))
    return res
  }
}

// 更新表单
export function updateFormObj(reduce, gf, fields) {
  return async (dispatch, getState) => {
    if (!fields)
      fields = gf(['attributeForm'])
    // 字段校验。返回一个长度为2的数组，第一个是boolean值，代表是否校验成功，第二个是错误消息状态
    const [result, resultObj] = await validator.fieldValidator(fields, rules)
    // 更新文本域验证状态
    reduce('validateState', { type: 'update', data: resultObj })
    // 更新表单数据
    reduce('attributeForm', { type: 'update', data: fields })
    return result
  }
}