const app = require('vn-loopback/server/server');
const ParameterizedSQL = require('loopback-connector').ParameterizedSQL;

// 2277 solucionar problema al testear procedimiento con start transaction / rollback
xdescribe('ticket_componentMakeUpdate()', () => {
    it('should recalculate the ticket components without make modifications', async() => {
        let stmts = [];
        let stmt;

        let params = {
            ticketId: 11,
            clientId: 102,
            agencyModeId: 2,
            addressId: 122,
            zoneId: 3,
            warehouseId: 1,
            companyId: 442,
            isDeleted: 0,
            hasToBeUnrouted: 0,
            componentOption: 1
        };

        stmts.push('START TRANSACTION');

        stmt = new ParameterizedSQL('SELECT * FROM vn.ticket WHERE id = ?', [
            params.ticketId
        ]);
        stmts.push(stmt);

        let originalTicketIndex = stmts.push(stmt) - 1;

        stmt = new ParameterizedSQL('CALL vn.ticket_componentMakeUpdate(?, ?, ?, ?, ?, ?, ?, DATE_ADD(CURDATE(), INTERVAL +1 DAY), DATE_ADD(CURDATE(), INTERVAL +1 DAY), ?, ?, ?)', [
            params.ticketId,
            params.clientId,
            params.agencyModeId,
            params.addressId,
            params.zoneId,
            params.warehouseId,
            params.companyId,
            params.isDeleted,
            params.hasToBeUnrouted,
            params.componentOption
        ]);
        stmts.push(stmt);

        stmt = new ParameterizedSQL('SELECT * FROM vn.ticket WHERE id = ?', [
            params.ticketId
        ]);
        stmts.push(stmt);

        let updatedTicketIndex = stmts.push(stmt) - 1;

        stmts.push('ROLLBACK');

        let sql = ParameterizedSQL.join(stmts, ';');
        let result = await app.models.Ticket.rawStmt(sql);

        let originalTicketData = result[originalTicketIndex];
        let updatedTicketData = result[updatedTicketIndex];

        expect(originalTicketData[0].isDeleted).toEqual(updatedTicketData[0].isDeleted);
        expect(originalTicketData[0].routeFk).toEqual(updatedTicketData[0].routeFk);
    });

    it('should delete and unroute a ticket and recalculate the components', async() => {
        let stmts = [];
        let stmt;

        let params = {
            ticketId: 11,
            clientId: 102,
            agencyModeId: 2,
            addressId: 122,
            zoneId: 3,
            warehouseId: 1,
            companyId: 442,
            isDeleted: 1,
            hasToBeUnrouted: 1,
            componentOption: 1
        };

        stmts.push('START TRANSACTION');

        stmt = new ParameterizedSQL('SELECT * FROM vn.ticket WHERE id = ?', [
            params.ticketId
        ]);
        stmts.push(stmt);

        let originalTicketIndex = stmts.push(stmt) - 1;

        stmt = new ParameterizedSQL('CALL vn.ticket_componentMakeUpdate(?, ?, ?, ?, ?, ?, ?, DATE_ADD(CURDATE(), INTERVAL +1 DAY), DATE_ADD(CURDATE(), INTERVAL +1 DAY), ?, ?, ?)', [
            params.ticketId,
            params.clientId,
            params.agencyModeId,
            params.addressId,
            params.zoneId,
            params.warehouseId,
            params.companyId,
            params.isDeleted,
            params.hasToBeUnrouted,
            params.componentOption
        ]);
        stmts.push(stmt);

        stmt = new ParameterizedSQL('SELECT * FROM vn.ticket WHERE id = ?', [
            params.ticketId
        ]);
        stmts.push(stmt);

        let updatedTicketIndex = stmts.push(stmt) - 1;

        stmts.push('ROLLBACK');

        let sql = ParameterizedSQL.join(stmts, ';');
        let result = await app.models.Ticket.rawStmt(sql);

        let originalTicketData = result[originalTicketIndex];
        let updatedTicketData = result[updatedTicketIndex];

        expect(originalTicketData[0].isDeleted).not.toEqual(updatedTicketData[0].isDeleted);
        expect(originalTicketData[0].routeFk).not.toEqual(updatedTicketData[0].routeFk);
    });
});