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

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

const PROJECT_ID = String(process.env.PROJECT_ID);
const SCREEN_CODE = '100';
const MOVIE_THEATER_CODE = '118';

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

// tslint:disable-next-line:max-func-body-length
async function main() {
    let startTime: [number, number] = process.hrtime();
    let diff: [number, number] = process.hrtime(startTime);

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

    const seatRepo = await chevre.repository.place.Seat.createInstance(mongoose.connection);

    setInterval(
        async () => {
            startTime = process.hrtime();
            const seats = <Pick<chevre.factory.place.seat.IPlace, 'branchCode'>[]>await seatRepo.projectSeatsByScreeningRoom({
                limit: 100,
                page: 100,
                $projection: {
                    'containedInPlace.containedInPlace': 0,
                    'containedInPlace.typeOf': 0,
                    'containedInPlace.name': 0,
                    typeOf: 0,
                    additionalProperty: 0
                },
                project: { id: { $eq: PROJECT_ID } },
                screeningRoom: {
                    branchCode: { $eq: SCREEN_CODE },
                    containedInPlace: { branchCode: { $eq: MOVIE_THEATER_CODE } }
                }
                // branchCode: { $in: ['Z-384'] },
                // containedInPlace: {
                //     branchCode: {
                //         $in: ['Default']
                //     }
                // }
            });
            diff = process.hrtime(startTime);
            // tslint:disable-next-line:no-null-keyword
            console.dir(seats, { depth: null });
            console.log(seats.length, 'seats found');
            console.log('diff:', [diff[0], formatter.format(diff[1])]);
        },
        // tslint:disable-next-line:no-magic-numbers
        1000
    );
}

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