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

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

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

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
})
    .on('error', (err) => {
        // eslint-disable-next-line no-console
        console.error('createDefaultRedisClient: client onError:', err);
        // reject(err);
    });
client.connect();
mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false });

// tslint:disable-next-line:max-func-body-length
async function main() {
    const eventRepo = await chevre.repository.Event.createInstance(mongoose.connection);
    const stockHolderRepo = await chevre.repository.StockHolder.createInstance(
        client,
        mongoose.connection
    );

    const cursor = eventRepo.getCursor(
        {
            'project.id': { $ne: excludedProject.id },
            startDate: {
                $gte: moment()
                    .add(-1, 'days')
                    .toDate()
            },
            typeOf: { $eq: chevre.factory.eventType.ScreeningEvent }
            // _id: { $eq: 'blyk9q24f' }
        },
        {
            _id: 1,
            // offers: 1,
            startDate: 1,
            project: 1,
            typeOf: 1
        }
    );
    console.log('events found');

    let i = 0;
    await cursor.eachAsync(async (doc) => {
        i += 1;
        const event: Pick<
            chevre.factory.event.screeningEvent.IEvent,
            'id' | 'startDate' | 'project' | 'typeOf'
        > = doc.toObject();

        console.log(
            'conflicted?', event.project.id, event.typeOf, event.id, event.startDate, i);
        await stockHolderRepo.checkIfConflicted({
            eventId: event.id,
            startDate: event.startDate
        });
    });

    console.log(i, 'events checked');
}

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