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

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

const formatter = new Intl.NumberFormat('ja-JP');

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

async function main() {
    let startTime: [number, number] = process.hrtime();
    let diff: [number, number] = process.hrtime(startTime);
    let result: any;

    await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false });

    const eventRepo = await chevre.repository.Event.createInstance(mongoose.connection);
    const eventSeriesRepo = await chevre.repository.EventSeries.createInstance(mongoose.connection);
    const offerRepo = await chevre.repository.Offer.createInstance(mongoose.connection);
    const offerCatalogRepo = await chevre.repository.OfferCatalog.createInstance(mongoose.connection);
    const productRepo = await chevre.repository.Product.createInstance(mongoose.connection);

    startTime = process.hrtime();
    result = await (await chevre.service.offer.createService()).event.searchOfferAppliesToMovieTicket({
        event: {
            id: 'cm8dwc74k'
        },
        limit: 10,
        page: 1,
        store: { id: '51qbjcfr72h62m06vtv5kkhgje' },
        onlyValid: true,
        options: { useIncludeInDataCatalog: false }
    })({
        event: eventRepo,
        eventSeries: eventSeriesRepo,
        offer: offerRepo,
        offerCatalog: offerCatalogRepo,
        product: productRepo
    });
    diff = process.hrtime(startTime);
    console.log(result);
    console.log(result.length);
    console.log('diff:', [diff[0], formatter.format(diff[1])]);
}

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