// 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 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.searchOfferCatalogItemAvailability({
    //     event: {
    //         id: 'cm8dwc74j'
    //     },
    //     limit: 10,
    //     page: 1,
    //     availableAtOrFrom: { id: '51qbjcfr72h62m06vtv5kkhgje' },
    //     options: { considerUnacceptedPaymentMethod: true, useIncludeInDataCatalog: true }
    // })({
    //     event: eventRepo,
    //     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])]);

    startTime = process.hrtime();
    result = await (await chevre.service.offer.createService()).event.searchOfferCatalogItemAvailability({
        event: {
            id: 'cm8dwc74j'
        },
        limit: 10,
        page: 1,
        availableAtOrFrom: { id: '51qbjcfr72h62m06vtv5kkhgje' },
        options: { considerUnacceptedPaymentMethod: true, useIncludeInDataCatalog: false }
    })({
        event: eventRepo,
        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);
