import { Request, Response } from 'express';

const getDataSource = (req: Request, res: Response) => {
  const { key = '' , schema = '', data = ''} = req.query;
  switch (key) {
    case 'users':
      res.json({
        data: [
          {
            uid: '1',
            name: 'John Brown',
            age: 32,
            address: 'New York No. 1 Lake Park',
            idcard: '220101190101012001'
          },
          {
            uid: '2',
            name: 'Jim Green',
            age: 42,
            address: 'London No. 1 Lake Park',
            idcard: '220101190101012002'
          },
          {
            uid: '3',
            name: 'Joe Black',
            age: 32,
            address: 'Sidney No. 1 Lake Park',
            idcard: '220101190101012003'
          }
        ]
      })
      break;
    /*
      *  考点数据
      */
    case 'examination':
      let obj = {};
      if( schema === 'true' ){
        obj = {
          data: [
            /*{ title: '序号',
              dataIndex: 'index',
              valueType: 'indexBorder',              
              width: 48
            },*/
            {
              key: 'code',   // 确定这个列的唯一值,一般用于 dataIndex 重复的情况
              dataIndex: 'code',    // 与实体映射的 key，数组会被转化 [a,b] => Entity.a.b
              valueType: 'text',   // 数据的渲渲染方式，我们自带了一部分，你可以可以自定义 valueType 参照 https://procomponents.ant.design/components/schema/
              title: '考点代码', // 标题的内容，在 form 中是 label
              tooltip: '参照准考证考点', // 会在 title 旁边展示一个 icon，鼠标浮动之后展示
              valueEnum: '',    // 支持 object 和 Map，Map 是支持其他基础类型作为 key
              fieldProps: '',  // 传给渲染的组件的 props，自定义的时候也会传递
              formItemProps: {
                // 参照 https://ant.design/components/form-cn/#Rule
                rules: [
                  {
                    required: true,
                    message: '此项为必填项',
                  },
                  {
                    max: 6,
                    message: '最大长度为6字符',
                  }
                ],
              }, // 传递给 Form.Item 的配置
              proFieldProps: '',  // 设置到 ProField 上面的 props，内部属性
              //renderText: '',  // 修改的数据是会被 valueType 定义的渲染组件消费
              //render: '',   // 自定义只读模式的 dom,render 方法只管理的只读模式，编辑模式需要使用 renderFormItem
              //renderFormItem: '', // 自定义编辑模式,返回一个 ReactNode，会自动包裹 value 和 onChange
              request: null,  // 从远程请求网络数据，一般用于选择类组件
              params: null,   // 额外传递给 request 的参数，组件不做处理,但是变化会引起request 重新请求数据
              hideInDescriptions: true,   // 在 descriptions 中隐藏
              hideInForm: false,  // 在 Form 中隐藏
              hideInTable: false, // 在 Table 中隐藏
              hideInSearch: false, // 在 Table 的查询表格中隐藏
              columns:[],  // 嵌套子项，valueType 为 dependency 时，请使用(values) => ProFormColumnsType[]其他情况使用 ProFormColumnsType[]
              width: 150
            },
            {
              key: '2',   // 确定这个列的唯一值,一般用于 dataIndex 重复的情况
              dataIndex: 'name',    // 与实体映射的 key，数组会被转化 [a,b] => Entity.a.b
              valueType: 'text',   // 数据的渲渲染方式，我们自带了一部分，你可以可以自定义 valueType https://procomponents.ant.design/components/schema/
              title: '考点名称', // 标题的内容，在 form 中是 label
              tooltip: '参照准考证考点', // 会在 title 旁边展示一个 icon，鼠标浮动之后展示
              valueEnum: '',    // 支持 object 和 Map，Map 是支持其他基础类型作为 key
              fieldProps: '',  // 传给渲染的组件的 props，自定义的时候也会传递
              formItemProps: {
                rules: [
                  {
                    required: true,
                    message: '此项为必填项',
                  },
                  {
                    type: 'string',
                    message: '此项为文本内容',
                  }, 
                  {
                    max: 50,
                    message: '最大长度50',
                  }
                ],
              }, // 传递给 Form.Item 的配置
              proFieldProps: '',  // 设置到 ProField 上面的 props，内部属性
              //renderText: '',  // 修改的数据是会被 valueType 定义的渲染组件消费
              //render: '',   // 自定义只读模式的 dom,render 方法只管理的只读模式，编辑模式需要使用 renderFormItem
              //renderFormItem: '', // 自定义编辑模式,返回一个 ReactNode，会自动包裹 value 和 onChange
              request: null,  // 从远程请求网络数据，一般用于选择类组件
              params: null,   // 额外传递给 request 的参数，组件不做处理,但是变化会引起request 重新请求数据
              hideInDescriptions: true,   // 在 descriptions 中隐藏
              hideInForm: false,  // 在 Form 中隐藏
              hideInTable: false, // 在 Table 中隐藏
              hideInSearch: false, // 在 Table 的查询表格中隐藏
              columns:[
                {
                  key: '2-1',   // 确定这个列的唯一值,一般用于 dataIndex 重复的情况
                  dataIndex: 'realname',    // 与实体映射的 key，数组会被转化 [a,b] => Entity.a.b
                  valueType: 'text',   // 数据的渲渲染方式，我们自带了一部分，你可以可以自定义 valueType https://procomponents.ant.design/components/schema/
                  title: '姓名', // 标题的内容，在 form 中是 label
                  tooltip: '', // 会在 title 旁边展示一个 icon，鼠标浮动之后展示
                  valueEnum: '',    // 支持 object 和 Map，Map 是支持其他基础类型作为 key
                  fieldProps: '',  // 传给渲染的组件的 props，自定义的时候也会传递
                  formItemProps: {
                    rules: [
                      {
                        required: true,
                        message: '此项为必填项',
                      },
                      {
                        type: 'string',
                        message: '此项为文本内容',
                      }, 
                      {
                        max: 20,
                        message: '最大长度20',
                      }
                    ],
                  }, // 传递给 Form.Item 的配置
                  proFieldProps: '',  // 设置到 ProField 上面的 props，内部属性
                  //renderText: '',  // 修改的数据是会被 valueType 定义的渲染组件消费
                  //render: '',   // 自定义只读模式的 dom,render 方法只管理的只读模式，编辑模式需要使用 renderFormItem
                  //renderFormItem: '', // 自定义编辑模式,返回一个 ReactNode，会自动包裹 value 和 onChange
                  request: null,  // 从远程请求网络数据，一般用于选择类组件
                  params: null,   // 额外传递给 request 的参数，组件不做处理,但是变化会引起request 重新请求数据
                  hideInDescriptions: true,   // 在 descriptions 中隐藏
                  hideInForm: true,  // 在 Form 中隐藏
                  hideInTable: false, // 在 Table 中隐藏
                  hideInSearch: false, // 在 Table 的查询表格中隐藏
                  //columns:[]  // 嵌套子项，valueType 为 dependency 时，请使用(values) => ProFormColumnsType[]其他情况使用 ProFormColumnsType[]
                }
              ]  // 嵌套子项，valueType 为 dependency 时，请使用(values) => ProFormColumnsType[]其他情况使用 ProFormColumnsType[]
            },
            {
              key: '3',   // 确定这个列的唯一值,一般用于 dataIndex 重复的情况
              dataIndex: 'examiner',    // 与实体映射的 key，数组会被转化 [a,b] => Entity.a.b
              valueType: 'text',   // 数据的渲渲染方式，我们自带了一部分，你可以可以自定义 valueType https://procomponents.ant.design/components/schema/
              title: '主考姓名及联系方式', // 标题的内容，在 form 中是 label
              tooltip: '', // 会在 title 旁边展示一个 icon，鼠标浮动之后展示
              valueEnum: '',    // 支持 object 和 Map，Map 是支持其他基础类型作为 key
              fieldProps: '',  // 传给渲染的组件的 props，自定义的时候也会传递
              formItemProps: {
                rules: [
                  {
                    required: true,
                    message: '此项为必填项',
                  },
                  {
                    type: 'string',
                    message: '此项为文本内容',
                  }, 
                  {
                    max: 50,
                    message: '最大长度50',
                  }
                ],
              }, // 传递给 Form.Item 的配置
              proFieldProps: '',  // 设置到 ProField 上面的 props，内部属性
              //renderText: '',  // 修改的数据是会被 valueType 定义的渲染组件消费
              //render: '',   // 自定义只读模式的 dom,render 方法只管理的只读模式，编辑模式需要使用 renderFormItem
              //renderFormItem: '', // 自定义编辑模式,返回一个 ReactNode，会自动包裹 value 和 onChange
              request: null,  // 从远程请求网络数据，一般用于选择类组件
              params: null,   // 额外传递给 request 的参数，组件不做处理,但是变化会引起request 重新请求数据
              hideInDescriptions: true,   // 在 descriptions 中隐藏
              hideInForm: true,  // 在 Form 中隐藏
              hideInTable: false, // 在 Table 中隐藏
              hideInSearch: false, // 在 Table 的查询表格中隐藏
              columns:[]  // 嵌套子项，valueType 为 dependency 时，请使用(values) => ProFormColumnsType[]其他情况使用 ProFormColumnsType[]
            },
            {
              key: '4',   // 确定这个列的唯一值,一般用于 dataIndex 重复的情况
              dataIndex: 'examinationRoomTotal',    // 与实体映射的 key，数组会被转化 [a,b] => Entity.a.b
              valueType: 'digit',   // 数据的渲渲染方式，我们自带了一部分，你可以可以自定义 valueType https://procomponents.ant.design/components/schema/
              title: '考场数', // 标题的内容，在 form 中是 label
              hideInSearch: true, // 在 Table 的查询表格中隐藏
              width: 150
            },
            {
              key: '5',   // 确定这个列的唯一值,一般用于 dataIndex 重复的情况
              dataIndex: 'publicTelephone',    // 与实体映射的 key，数组会被转化 [a,b] => Entity.a.b
              valueType: 'text',   // 数据的渲渲染方式，我们自带了一部分，你可以可以自定义 valueType https://procomponents.ant.design/components/schema/             
              title: '公开电话', // 标题的内容，在 form 中是 label
            },
            {
              key: '6',   // 确定这个列的唯一值,一般用于 dataIndex 重复的情况
              dataIndex: 'address',    // 与实体映射的 key，数组会被转化 [a,b] => Entity.a.b
              valueType: 'text',   // 数据的渲渲染方式，我们自带了一部分，你可以可以自定义 valueType https://procomponents.ant.design/components/schema/
              title: '地址', // 标题的内容，在 form 中是 label
              formItemProps: {
                rules: [
                  {
                    required: true,
                    message: '此项为必填项',
                  },
                  {
                    type: 'string',
                    message: '此项为文本内容',
                  }, 
                  {
                    max: 50,
                    message: '最大长度200',
                  }
                ],
              }, // 传递给 Form.Item 的配置
            },
            {
              key: '7',   // 确定这个列的唯一值,一般用于 dataIndex 重复的情况
              dataIndex: 'busRoute',    // 与实体映射的 key，数组会被转化 [a,b] => Entity.a.b
              valueType: 'text',   // 数据的渲渲染方式，我们自带了一部分，你可以可以自定义 valueType https://procomponents.ant.design/components/schema/
              title: '乘车路线', // 标题的内容，在 form 中是 label
              hideInTable: true, // 在 Table 中隐藏
              hideInSearch: true, // 在 Table 的查询表格中隐藏
            },
            {
              key: '8',   // 确定这个列的唯一值,一般用于 dataIndex 重复的情况
              dataIndex: 'electricLine',    // 与实体映射的 key，数组会被转化 [a,b] => Entity.a.b
              valueType: 'text',   // 数据的渲渲染方式，我们自带了一部分，你可以可以自定义 valueType https://procomponents.ant.design/components/schema/
              title: '用电线路', // 标题的内容，在 form 中是 label
              hideInTable: true, // 在 Table 中隐藏
            }
          ]
        }
      }
      if( data === 'true' ){
        let _data = [];
        for(let i=1; i<=30; i++){
          const _str = i.toString().padStart(2, '0')
          _data.push(
            {
              id: '000000001'+ _str,
              code: '2017' + _str, // 考点代码
              name: '长春高新第'+_str+'实验学校',
              examiner: // 主考姓名及联系方式
                {
                  realname: '张安开', // 姓名
                  tel: '819629' + _str, // 电话
                  mobile: '130214563' + _str // 手机
                },
              contact: // 考点联系人方式
                {
                  realname: '安若昂', // 姓名
                  tel: '819625' + _str, // 电话
                  mobile: '130214567' + _str // 手机
                },
              secretRoom: // 保密室
                {
                  tel: '819625' + _str // 电话
                },
              monitorRoom: // 监控室
                {
                  tel: '819625' + _str // 电话
                },
              examinationRoomTotal: 30, // 考场数
              publicTelephone: '819612' + _str, // 公开电话
              address: '长春市高新区飞跃路' + _str + '号', // 地址
              busRoute: _str +'225路，202路', // 乘车路线
              electricLine: '飞跃路线' + _str // 用电线路
            }
          )
        }
        
        obj = {
          // DATA 数据记录
          data: _data
        }
      }     

      res.json(obj)
      break;
    case 'notices':
      res.json({
        data: [
          {
            id: '000000001',
            avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
            title: '你收到了 14 份新周报',
            datetime: '2017-08-09',
            type: 'notification',
          },
          {
            id: '000000002',
            avatar: 'https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png',
            title: '你推荐的 曲妮妮 已通过第三轮面试',
            datetime: '2017-08-08',
            type: 'notification',
          },
          {
            id: '000000003',
            avatar: 'https://gw.alipayobjects.com/zos/rmsportal/kISTdvpyTAhtGxpovNWd.png',
            title: '这种模板可以区分多种通知类型',
            datetime: '2017-08-07',
            read: true,
            type: 'notification',
          },
          {
            id: '000000004',
            avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png',
            title: '左侧图标用于区分不同的类型',
            datetime: '2017-08-07',
            type: 'notification',
          },
          {
            id: '000000005',
            avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
            title: '内容不要超过两行字，超出时自动截断',
            datetime: '2017-08-07',
            type: 'notification',
          },
          {
            id: '000000006',
            avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
            title: '曲丽丽 评论了你',
            description: '描述信息描述信息描述信息',
            datetime: '2017-08-07',
            type: 'message',
            clickClose: true,
          },
          {
            id: '000000007',
            avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
            title: '朱偏右 回复了你',
            description: '这种模板用于提醒谁与你发生了互动，左侧放『谁』的头像',
            datetime: '2017-08-07',
            type: 'message',
            clickClose: true,
          },
          {
            id: '000000008',
            avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
            title: '标题',
            description: '这种模板用于提醒谁与你发生了互动，左侧放『谁』的头像',
            datetime: '2017-08-07',
            type: 'message',
            clickClose: true,
          },
          {
            id: '000000009',
            title: '任务名称',
            description: '任务需要在 2017-01-12 20:00 前启动',
            extra: '未开始',
            status: 'todo',
            type: 'event',
          },
          {
            id: '000000010',
            title: '第三方紧急代码变更',
            description: '冠霖提交于 2017-01-06，需在 2017-01-07 前完成代码变更任务',
            extra: '马上到期',
            status: 'urgent',
            type: 'event',
          },
          {
            id: '000000011',
            title: '信息安全考试',
            description: '指派竹尔于 2017-01-09 前完成更新并发布',
            extra: '已耗时 8 天',
            status: 'doing',
            type: 'event',
          },
          {
            id: '000000012',
            title: 'ABCD 版本发布',
            description: '冠霖提交于 2017-01-06，需在 2017-01-07 前完成代码变更任务',
            extra: '进行中',
            status: 'processing',
            type: 'event',
          },
        ],
      });
      break;
    default:
      res.json({data:[]})
      break;
  }
  
}

export default {
  'GET /api/dataSource': getDataSource,
};
