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

const rostersyncinterfaceList = Mock.mock({
  'list|50': [{
    'id': '@increment',
    'dm': '@word(4)',
    'mc': '@cword(6, 15)',
    'tj': '@word(15)',
    'px': '@word(15)',
    'gglx': '@word(15)'
  }]
}).list

export default{
  getList: config => {
    const { dm, mc, tj, px, gglx, pageIndex = 1, pageSize = 20 } = param2Obj(config.url)
    const mockList = rostersyncinterfaceList.filter(item => {
      if (dm && item.dm !== dm) return false
      if (mc && item.mc !== mc) return false
      if (tj && item.tj !== tj) return false
      if (px && item.px !== px) return false
      if (gglx && item.gglx !== gglx) return false
      return true
    })

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