'use strict';
const fs = require('fs');
const xlsxDownload = require('../../../../utils/xlsxDownload.js');
const moment = require('moment');
const request = require('superagent');

async function dataExport (ctx) {
    try {
        let tableAttributesCopy = {}
        const models = ctx.fs.dc.models;
        const { userId } = ctx.fs.api
        const { exp, ids, roadLevel, municipalType,
            patrolType } = ctx.query;
        if (!exp) {
            throw '参数错误';
        }

        const modalList = [
            {
                n: '道路',
                k: 'road',
                tableName: 'Road',
            },
            {
                n: '桥梁',
                k: 'bridge',
                tableName: 'Bridge'
            },
            {
                n: '运政车辆',
                k: 'vehicle',
                tableName: 'MunicipalVehicle',
            },
            {
                n: '运政业户',
                k: 'business',
                tableName: 'MunicipalBusiness',
            },
            {
                n: '在建项目',
                k: 'project',
                tableName: 'Project',
            },
            {
                n: '治超',
                k: 'overspeed',
                tableName: 'Overspeed',
            },
            {
                n: '公交线路',
                k: 'busLine',
                tableName: 'BusLine',
            },
            {
                n: '公交车辆',
                k: 'busCar',
                tableName: 'BusCar',
            },
            {
                n: '巡更记录',
                k: 'patrol',
                tableName: 'Report',
            },
            {
                n: '养护记录',
                k: 'maintenance',
                tableName: 'Report',
            },
        ]

        const modalOption = modalList.find(item => item.k == exp);
        if (!modalOption) {
            throw '参数错误';
        }

        let findOption = {
            where: {}
        }
        if (ids) {
            findOption.where.id = { $in: ids.split(',') }
        }
        if (roadLevel) {
            findOption.where.level = roadLevel
        }
        if (municipalType) {
            findOption.where.type = municipalType
        }

        const exportData = await models[modalOption.tableName].findAll(findOption)
        const tableAttributes = models[modalOption.tableName].tableAttributes
        //过滤project部门字段
        if (modalOption.tableName === 'Project') {
            const { entryName, projectMileage, investment, buildUnit,
                constructionControlUnit, designUnit, constructionUnit, qutityUnit, startTime, remark, done } = tableAttributes
            tableAttributesCopy = {
                entryName, projectMileage, investment, buildUnit,
                constructionControlUnit, designUnit, constructionUnit, qutityUnit, startTime, remark, done
            }
        } else {
            tableAttributesCopy = tableAttributes
        }

        let header = []

        for (let k in tableAttributesCopy) {
            let comment = tableAttributes[k].comment
            if (k != 'id' && comment) {
                if (comment == '品名' && municipalType == '出租车') {
                    continue
                }
                if (patrolType) {
                    if (patrolType == 'road') {

                    } else if (patrolType == 'anomaly') {

                    } else {
                        // 正常的之前的巡查内容
                        if (comment == '工程名称') {
                            continue
                        }
                    }
                }
                header.push({
                    title: comment || '-',
                    key: k,
                    index: tableAttributes[k].index,
                })
            }
        }
        header.sort((a, b) => { return a.index - b.index })

        const fileName = `${modalOption.n}_${moment().format('YYYYMMDDHHmmss')}` + '.csv'
        const filePath = await xlsxDownload.simpleExcelDown({ data: exportData, header, fileName: fileName, exp })
        const fileData = fs.readFileSync(filePath);

        ctx.status = 200;
        ctx.set('Content-Type', 'application/x-xls');
        ctx.set('Content-disposition', 'attachment; filename=' + encodeURI(fileName));
        ctx.body = fileData;
    } catch (error) {
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
        ctx.status = 400;
        ctx.body = {
            message: typeof error == 'string' ? error : undefined
        }
    }
}

async function godTrans (ctx) {
    try {
        const models = ctx.fs.dc.models;
        const { userId } = ctx.fs.api

        const res = await request.get('https://report.amap.com/ajax/districtRank.do?linksType=1&cityCode=360100')

        const data = JSON.parse(res.text)
        const nanchang = data.find(item => item.name == '南昌县') || {}
        ctx.status = 200
        ctx.body = nanchang
    } catch (error) {
        ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
        ctx.status = 400;
        ctx.body = {
            message: typeof error == 'string' ? error : undefined
        }
    }
}

module.exports = {
    dataExport,
    godTrans
};