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

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

// const PROJECT_ID = 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, { autoIndex: false });

    const eventRepo = await chevre.repository.Event.createInstance(mongoose.connection);
    const offerCatalogRepo = await chevre.repository.OfferCatalog.createInstance(mongoose.connection);
    const offerCatalogItemRepo = await chevre.repository.OfferCatalogItem.createInstance(mongoose.connection);
    const productRepo = await chevre.repository.Product.createInstance(mongoose.connection);

    const result = await (await chevre.service.offer.createService()).event.searchOfferCatalogItems({
        event: {
            id: 'bm0f0cadm'
        },
        limit: 10,
        page: 1,
        options: { includedInDataCatalog: { id: 'blpj322ni' } }
    })({
        event: eventRepo,
        offerCatalog: offerCatalogRepo,
        offerCatalogItem: offerCatalogItemRepo,
        product: productRepo
    });
    console.log(result);
    console.log(result.length);

    // console.log('searching...');
    // const catalogs = await catalogItemRepo.search(
    //     {
    //         project: { id: { $eq: PROJECT_ID } },
    //         sort: { identifier: chevre.factory.sortType.Descending },
    //         limit: 2,
    //         page: 1,
    //         itemListElement: { typeOf: { $eq: 'Offer' } }
    //     }
    // );
    // console.log(catalogs[0]?.id, typeof catalogs[0]?.id);
    // console.log(catalogs.length);

    // const numCatalogs = await catalogItemRepo.count(
    //     {
    //         project: { id: { $eq: PROJECT_ID } },
    //         itemListElement: { typeOf: { $eq: 'Offer' } }
    //     }
    // );
    // console.log('numCatalogs:', numCatalogs);
}

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