import Mock from 'mockjs'
import { param2Obj, parseTime } from '@/utils'

const userList = Mock.mock({
  'list|26': [{
    'id': '@increment',
    'rownum': '@id',
    'ghxh': '@id',
    'xm': '000@id',
    'zhlb|1': ['教职工', '学生', '其他'],
    'sex|1': ['男', '女'],
    'zt|1': ['启用', '停用'],
    'yx': '@cword(3, 5)',
    'xybm': '@word(6, 10)',
    'gzdw': '@word(6, 10)',
    'sj': '@cword(3, 5)',
    'wx': '@cword(3, 5)',
    'qq': '@cword(3, 5)'
  }]
}).list

const zhlbList = Mock.mock(
  [{
    'value': 'teacher',
    'label': '教职工'
  },
  {
    'value': 'student',
    'label': '学生'
  },
  {
    'value': 'other',
    'label': '其他'
  }]
)

const sexList = Mock.mock(
  [{
    'value': 'male',
    'label': '男'
  },
  {
    'value': 'female',
    'label': '女'
  }]
)
const ztList = Mock.mock(
  [{
    'value': 'on',
    'label': '启用'
  },
  {
    'value': 'off',
    'label': '停用'
  }]
)
export default{
  getPage: config => {
    const { zhlb, ghxhxm, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
    const mockList = userList.filter(item => {
      if (zhlb && item.zhlb !== zhlb) return false
      if (ghxhxm && item.ghxh + '' !== ghxhxm + '' && item.xm + '' !== ghxhxm + '') return false
      return true
    })

    const pageList = mockList.filter((item, index) => index < pageSize * pageIndex && index >= pageSize * (pageIndex - 1))
    return {
      sexList: sexList,
      ztList: ztList,
      zhlbList: zhlbList,
      items: pageList,
      recordCount: mockList.length,
      code: 200
    }
  },
  getItem: config => {
    const { id } = param2Obj(config.url)
    const mockList = userList.filter(item => item.id + '' === id + '')
    return {
      data: mockList.length > 0 ? mockList[0] : null,
      code: 200
    }
  },
  createData: config => {
    const user = JSON.parse(config.body)
    user.cjsj = parseTime(new Date(), '{y}-{m}-{d}')
    if (!user.id) {
      user.id = '' + parseInt(Math.random() * 100) + 1024 // mock a id
      userList.unshift(user)
    } else {
      for (let i = 0; i < userList.length; i++) {
        if (userList[i].id + '' === user.id + '') {
          userList.splice(i, 1, user)
          break
        }
      }
    }
    return {
      item: user,
      code: 200
    }
  },
  deleteData: config => {
    const user = JSON.parse(config.body)
    let index = -1
    for (let i = 0; i < userList.length; i++) {
      if (userList[i].id + '' === user.id + '') {
        index = i
        break
      }
    }
    if (index > -1) {
      userList.splice(index, 1)
    }
    return {
      code: 200
    }
  }
}
