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

async function dataExport (ctx) {
    try {
        const models = ctx.fs.dc.models;
        const { userId } = ctx.fs.api
        const { exp, ids, roadLevel, municipalType } = 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',
            },
        ]

        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
        let header = []
        for (let k in tableAttributes) {
            if (k != 'id' && tableAttributes[k].comment) {
                header.push({
                    title: tableAttributes[k].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 })
        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
        }
    }
}

module.exports = {
    dataExport
};