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

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

const project = { id: <string>process.env.PROJECT_ID };
// const EVENT_ID = String(process.env.EVENT_ID);

// tslint:disable-next-line:max-func-body-length
async function main() {
    await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false });
    // const client = redis.createClient<redis.RedisDefaultModules, Record<string, never>, Record<string, never>>({
    //     socket: {
    //         port: Number(<string>process.env.REDIS_PORT),
    //         host: <string>process.env.REDIS_HOST
    //     },
    //     password: <string>process.env.REDIS_KEY
    // });
    // await client.connect();

    const aggregateReservationRepo = await chevre.repository.AggregateReservation.createInstance(mongoose.connection);
    const aggregateReservations = await aggregateReservationRepo.searchWithReservationForId(
        {
            limit: 10,
            page: 1,
            project: { id: { $eq: project.id } },
            reservationFor: {
                id: {
                    $in: [
                        'blvcj2vfl', 'blvcj2w48',
                        'blvcj2wqj', 'blvcj2y1n',
                        'blvcj2ylh', 'blvcj2z7k',
                        'blvcj2zqz', 'blvcj30d3',
                        'blvcj30wo', 'blvcj32as'
                    ]
                },
                typeOf: chevre.factory.eventType.ScreeningEvent
            },
            sort: { 'reservationFor.startDate': 1 }
        },
        ['aggregateOffer']
    );
    console.log('aggregateReservations:', aggregateReservations);
    console.log('aggregateReservations:', aggregateReservations.map(({ id }) => id));

    // await (await chevre.service.aggregation.createService()).event.aggregateOffers({
    //     id: EVENT_ID,
    //     typeOf: chevre.factory.eventType.ScreeningEvent
    // })({
    //     aggregateReservation: aggregateReservationRepo,
    //     event: await chevre.repository.Event.createInstance(mongoose.connection),
    //     stockHolder: await chevre.repository.StockHolder.createInstance(client, mongoose.connection),
    //     offer: await chevre.repository.Offer.createInstance(mongoose.connection),
    //     offerCatalog: await chevre.repository.OfferCatalog.createInstance(mongoose.connection),
    //     offerRateLimit: await chevre.repository.rateLimit.Offer.createInstance(client),
    //     screeningRoom: await chevre.repository.place.ScreeningRoom.createInstance(mongoose.connection),
    //     product: await chevre.repository.Product.createInstance(mongoose.connection),
    //     reservation: await chevre.repository.Reservation.createInstance(mongoose.connection)
    // });
    // console.log('aggregateReserveAction processed.');

    // aggregateReservations = await aggregateReservationRepo.searchWithReservationForId(
    //     {
    //         limit: 1,
    //         page: 1,
    //         sort: { 'reservationFor.startDate': 1 },
    //         project: { id: { $eq: project.id } },
    //         reservationFor: {
    //             id: {
    //                 $eq: EVENT_ID,
    //                 $in: [EVENT_ID]
    //             },
    //             typeOf: chevre.factory.eventType.ScreeningEvent
    //         }
    //     },
    //     []
    // );
    // console.log('aggregateReservations:', aggregateReservations);
}

main()
    .then(() => {
        console.log('success!');
    })
    .catch(console.error);
