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

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

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

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

    const actionRepo = await chevre.repository.Action.createInstance(mongoose.connection);
    const categoryCodeRepo = await chevre.repository.CategoryCode.createInstance(mongoose.connection);
    const creativeWorkRepo = await chevre.repository.CreativeWork.createInstance(mongoose.connection);
    const eventRepo = await chevre.repository.Event.createInstance(mongoose.connection);
    const eventSeriesRepo = await chevre.repository.EventSeries.createInstance(mongoose.connection);
    const screeningRoomRepo = await chevre.repository.place.ScreeningRoom.createInstance(mongoose.connection);
    const movieTheaterRepo = await chevre.repository.place.MovieTheater.createInstance(mongoose.connection);
    const sellerRepo = await chevre.repository.Seller.createInstance(mongoose.connection);

    const coaAuthClient = new (await chevre.loadCOA()).auth.RefreshToken({
        endpoint: String(process.env.COA_ENDPOINT),
        refreshToken: process.env.COA_REFRESH_TOKEN,
        useFetch: true
    });
    const masterService = new (await chevre.loadCOA()).service.Master(
        {
            endpoint: String(process.env.COA_ENDPOINT),
            auth: coaAuthClient
        },
        { timeout: 20000 }
    );

    await (await chevre.service.event.createService()).importFromCOA({
        project: {
            id: project.id,
            typeOf: chevre.factory.organizationType.Project
        },
        locationBranchCode: '120',
        importFrom: moment()
            .toDate(),
        importThrough: moment()
            .add(1, 'day')
            .toDate(),
        saveMovieTheater: false,
        saveScreeningEventSeries: false,
        // saveScreeningEventSeries: true,
        saveScreeningEventSeriesPeriodInMonth: 3
    })({
        action: actionRepo,
        categoryCode: categoryCodeRepo,
        creativeWork: creativeWorkRepo,
        event: eventRepo,
        eventSeries: eventSeriesRepo,
        movieTheater: movieTheaterRepo,
        screeningRoom: screeningRoomRepo,
        seller: sellerRepo,
        masterService
    });
    console.log('imported');
}

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