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

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

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

// tslint:disable-next-line:max-func-body-length
async function main() {
    await mongoose.connect(<string>process.env.MONGOLAB_URI, { autoIndex: false });
    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
    });
    await client.connect();

    const transaction = await (await chevre.service.transaction.createService()).placeOrder.start(
        {
            project: { id: project.id, typeOf: chevre.factory.organizationType.Project },
            agent: { id: CLIENT_ID, typeOf: chevre.factory.creativeWorkType.WebApplication },
            object: {
                clientUser: <any>{ client_id: CLIENT_ID },
                passport: {
                    token: 'xxx'
                }
            },
            seller: { id: '622ea934a42374000a1f9114' }
        },
        {
            lockPassport: true
        }
    )({
        issuer: await chevre.repository.Issuer.createInstance(mongoose.connection),
        member: await chevre.repository.Member.createInstance(mongoose.connection),
        memberProgram: await chevre.repository.MemberProgram.createInstance(mongoose.connection),
        passport: await chevre.repository.Passport.createInstance(
            client,
            {
                secret: 'xxx',
                issuers: ['https://example.com']
            }
        ),
        projectMakesOffer: await chevre.repository.ProjectMakesOffer.createInstance(mongoose.connection),
        seller: await chevre.repository.Seller.createInstance(mongoose.connection),
        transaction: await chevre.repository.Transaction.createInstance(mongoose.connection)
    });
    console.log('transaction started', transaction);
}

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