// tslint:disable:no-console
import * as mongoose from 'mongoose';

import { chevre } from '../../../lib/index';

const project = { id: String(process.env.PROJECT_ID) };

mongoose.Model.on('index', (...args) => {
    console.error('******** index event emitted. ********\n', args);
});

async function main() {
    await mongoose.connect(<string>process.env.MONGOLAB_URI);

    const acceptedOfferRepo = await chevre.repository.AcceptedOffer.createInstance(mongoose.connection);

    const acceptedOffers = await acceptedOfferRepo.searchAcceptedOffersByOrderNumber(
        {
            // tslint:disable-next-line:no-magic-numbers
            limit: 10,
            page: 1,
            project: { id: { $eq: project.id } },
            orderNumber: { $eq: 'CIN7-9247770-0699829' },
            acceptedOffers: {
                itemOffered: {
                    typeOf: { $in: [chevre.factory.reservationType.EventReservation] },
                    reservationFor: { id: { $in: ['blpw1ew8f'] } },
                    reservedTicket: { ticketedSeat: { seatNumber: { $in: ['A-26', 'xxx'] } } }
                }
            }
        },
        ['itemOffered', 'priceSpecification']
    );
    // tslint:disable-next-line:no-null-keyword
    console.dir(acceptedOffers, { depth: 1 });
    const reservationIds = acceptedOffers.map((acceptedOffer) => {
        if (acceptedOffer.itemOffered.typeOf === chevre.factory.reservationType.EventReservation) {
            return acceptedOffer.itemOffered.id;
        } else {
            return '';
        }
    });
    console.log('reservationIds:', reservationIds);
}

main()
    .then()
    .catch(console.error);
