const db = require('vn-print/core/database');
const closure = require('./closure');

module.exports = async function(request, response, next) {
    try {
        const reqArgs = request.query;
        if (!reqArgs.to)
            throw new Error('The argument to is required');

        response.status(200).json({
            message: 'Success'
        });

        const tickets = await db.rawSql(`
            SELECT 
                t.id,
                t.clientFk,
                t.companyFk,
                c.name clientName,
                c.email recipient,
                c.salesPersonFk,
                c.isToBeMailed,
                c.hasToInvoice,
                co.hasDailyInvoice,
                eu.email salesPersonEmail
            FROM ticket t
                JOIN agencyMode am ON am.id = t.agencyModeFk
                JOIN warehouse wh ON wh.id = t.warehouseFk AND wh.hasComission
                JOIN ticketState ts ON ts.ticketFk = t.id
                JOIN alertLevel al ON al.id = ts.alertLevel
                JOIN client c ON c.id = t.clientFk
                JOIN province p ON p.id = c.provinceFk
                JOIN country co ON co.id = p.countryFk
                LEFT JOIN account.emailUser eu ON eu.userFk = c.salesPersonFk
            WHERE al.code = 'PACKED'
                AND DATE(t.shipped) BETWEEN DATE_ADD(?, INTERVAL -2 DAY) 
                    AND util.dayEnd(?)
                AND t.refFk IS NULL
            GROUP BY t.id`, [reqArgs.to, reqArgs.to]);

        await closure.start(tickets, response.locals);

        await db.rawSql(`
            UPDATE ticket t
                JOIN ticketState ts ON t.id = ts.ticketFk
                JOIN alertLevel al ON al.id = ts.alertLevel
                JOIN agencyMode am ON am.id = t.agencyModeFk
                JOIN deliveryMethod dm ON dm.id = am.deliveryMethodFk
                JOIN zone z ON z.id = t.zoneFk
            SET t.routeFk = NULL
                WHERE DATE(t.shipped) BETWEEN DATE_ADD(?, INTERVAL -2 DAY)
                    AND util.dayEnd(?)
                    AND al.code NOT IN('DELIVERED','PACKED')
                    AND t.routeFk
                    AND z.name LIKE '%MADRID%'`, [reqArgs.to, reqArgs.to]);
    } catch (error) {
        next(error);
    }
};