import { queryDictData, queryLogo } from '@/api/dict'
import { queryPotocolManage } from '@/api/management'
import { getToken } from '@/utils/auth'
import store from '../index'

const getDefaultState = () => {
  return {
    dictionary: {
      // 个人证件类型
      certType: [
        { 'label': '居民身份证', 'value': 'IDCARD' },
        { 'label': '户口簿', 'value': 'HOUSEHOLD' },
        { 'label': '中国人民武装警察身份证件', 'value': 'POLICEPAPER' },
        { 'label': '中国人民解放军军人身份证件', 'value': 'PLAIDCARD' },
        { 'label': '港澳居民来往内地通行证', 'value': 'HKIDCARD' },
        { 'label': '台湾居民来往大陆通行证', 'value': 'TAIBAOZHENG' },
        { 'label': '外国公民护照', 'value': 'PASSPORT' },
        { 'label': '港澳居民居住证', 'value': 'HKRESIDENCECARD' },
        { 'label': '台湾居民居住证', 'value': 'TWRESIDENCECARD' }
      ],
      // 企业证件类型
      companyCertType: [
        { 'label': '统一社会信用代码', 'value': '0' },
        { 'label': '组织机构代码证', 'value': '1' },
        { 'label': '营业执照', 'value': '2' },
        { 'label': '事业单位法人证书或者社会团体法人登记证书', 'value': '3' }
      ],
      // 企业性质
      companyType: [
        { 'label': '国有企业', 'value': '0' },
        { 'label': '集体所有制', 'value': '1' },
        { 'label': '私营企业', 'value': '2' },
        { 'label': '有限责任公司', 'value': '3' },
        { 'label': '股份有限公司', 'value': '4' },
        { 'label': '有限合伙企业', 'value': '5' },
        { 'label': '联营企业', 'value': '6' },
        { 'label': '外商投资企业', 'value': '7' },
        { 'label': '个人独资企业', 'value': '8' },
        { 'label': '其他', 'value': '9' }
      ],
      // 行业类型
      industryType: [
        { 'label': '农、林、牧、渔业', 'value': '0' },
        { 'label': '采矿业', 'value': '1' },
        { 'label': '制造业', 'value': '2' },
        { 'label': '电力、热力、燃气及水生产和供应业', 'value': '3' },
        { 'label': '建筑业', 'value': '4' },
        { 'label': '批发和零售业', 'value': '5' },
        { 'label': '交通运输、仓储和邮政业', 'value': '6' },
        { 'label': '住宿和餐饮业', 'value': '7' },
        { 'label': '信息传输、软件和信息技术服务业', 'value': '8' },
        { 'label': '金融业', 'value': '9' },
        { 'label': '房地产业', 'value': '10' },
        { 'label': '租赁和商务服务业', 'value': '11' },
        { 'label': '科学研究和技术服务业', 'value': '12' },
        { 'label': '水利、环境和公共设施管理业', 'value': '13' },
        { 'label': '居民服务、修理和其他服务业', 'value': '14' },
        { 'label': '教育', 'value': '15' },
        { 'label': '卫生和社会工作', 'value': '16' },
        { 'label': '文化、体育和娱乐业', 'value': '17' },
        { 'label': '公共管理、社会保障和社会组织', 'value': '18' },
        { 'label': '国际组织', 'value': '19' },
        { 'label': '其他', 'value': '20' }
      ],
      // 企业实名认证步骤
      enterpriseRealnameSteps: ['车卡信息录入', '填写企业信息', '填写责任人信息', '完成人脸识别'],
      // 企业责任人变更步骤
      personChangeSteps: ['变更责任人信息', '完成人脸识别'],
      // 车企二次实名步骤
      carEnterpriseRealnameSteps: ['车卡信息录入', '填写企业信息', '填写责任人信息'],
      // 业务类型
      businessType: [
        { label: '自然人新车实名认证', value: '1' }, // 自然人
        { label: '自然人二手车实名认证', value: '2' }, // 自然人
        { label: '企业新车实名认证', value: '3' }, // 企业实名
        { label: '车企新车实名认证', value: '4' }, // 企业实名
        { label: '企业责任人变更', value: '5' }, // 企业负责人变更
        { label: '车主解绑', value: '6' }, // 自然人
        { label: '二手车主解绑', value: '7' }, // 自然人
        { label: '车企实名解绑', value: '8' },
        { label: '设备更换', value: '9' },
        { label: '一车多卡绑定', value: '10' },
        { label: '重新绑定', value: '11' },
        { label: '企业解绑', value: '12' }
      ],
      livenessType: [
        { 'label': '唇语验证码', 'value': 'LIP' },
        { 'label': '动作序列', 'value': 'ACTION' }
      ],
      livenessActionSeq: [
        { 'label': '张嘴', 'value': '1' },
        { 'label': '闭眼', 'value': '2' }
      ],
      userType: [
        { label: '车企用户', value: 1 },
        { label: '经销商用户', value: 2 }
      ],
      logType: [
        { label: '登录日志', value: 1 },
        { label: '管理日志', value: 2 },
        { label: '实名日志', value: 3 },
        { label: '其他日志', value: 4 }
      ]
    },
    model: {
      pad: ['X960_6762_66_P', 'ST010-A', 'ST020'],
      aio: ['UW-M358', 'ST213-B']
    },
    logo: '',
    companyName: '',
    agreements: {},
    isInitLogo: false,
    logoExpires: 0
  }
}

const state = getDefaultState()

const mutations = {
  RESET_STATE: (state) => {
    Object.assign(state, getDefaultState())
  },
  SET_DICT: (state, dict) => {
    if (dict) {
      Object.keys(dict).forEach(key => {
        state.dictionary[key] = dict[key]
      })
    }
    // state.dictionary = dict
  },
  CHANGE_DICT: (state, { key, value }) => {
    // eslint-disable-next-line no-prototype-builtins
    if (state.dictionary.hasOwnProperty(key)) {
      state.dictionary[key] = value
    }
  },
  SET_LOGO(state, payload) {
    state.logo = payload
  },
  SET_COMPANY_NAME(state, payload) {
    state.companyName = payload
  },
  SET_AGREEMENT(state, payload) {
    state.agreements = payload
  }
}

const actions = {
  // get dict
  getDictionary({ commit, state }) {
    return new Promise((resolve, reject) => {
      queryDictData(state.token).then(response => {
        const data = response || {}
        commit('SET_DICT', data)
        resolve(data)
      }).catch(error => {
        reject(error)
      })
    })
  },

  // remove dict
  resetDict({ commit }) {
    return new Promise(resolve => {
      commit('RESET_STATE')
      resolve()
    })
  },

  changeDict({ commit }, data) {
    commit('CHANGE_DICT', data)
  },

  /**
   * 获取logo
   */
  async getLogo({ commit, state }, data) {
    // 如果当前查询过
    if (state.isInitLogo) {
      return
    }
    try {
      const respData = await (getToken() ? queryPotocolManage({ orgId: store.getters.organId }) : queryLogo(data))
      commit('SET_COMPANY_NAME', respData.organName || store.getters.organName)
      commit('SET_LOGO', respData.logoPc.fileUrl)
      commit('SET_AGREEMENT', respData)
      state.isInitLogo = true
    } catch (error) {
      console.error(error)
    }
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

