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

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

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

    const roleRepo = await chevre.repository.Role.createInstance(mongoose.connection);

    let roleNames = [
        chevre.factory.role.organizationRole.RoleName.Customer,
        chevre.factory.role.organizationRole.RoleName.EventsViewer,
        chevre.factory.role.organizationRole.RoleName.POS
    ];
    for (const roleName of roleNames) {
        const result = await roleRepo.addMember({
            roleName,
            member: { typeOf: chevre.factory.creativeWorkType.WebApplication },
            memberOf: { typeOf: chevre.factory.organizationType.Project }
        });
        console.log(result, roleName);
    }

    roleNames = [
        chevre.factory.role.organizationRole.RoleName.Server
    ];
    for (const roleName of roleNames) {
        const result = await roleRepo.addMember({
            roleName,
            member: { typeOf: chevre.factory.creativeWorkType.SoftwareApplication },
            memberOf: { typeOf: chevre.factory.organizationType.Project }
        });
        console.log(result, roleName);
    }

    roleNames = [
        chevre.factory.role.organizationRole.RoleName.Accountant,
        chevre.factory.role.organizationRole.RoleName.IAMRoleAdmin,
        chevre.factory.role.organizationRole.RoleName.InventoryManager,
        chevre.factory.role.organizationRole.RoleName.MemberAdmin,
        chevre.factory.role.organizationRole.RoleName.Owner,
        chevre.factory.role.organizationRole.RoleName.PaymentServiceAdmin,
        chevre.factory.role.organizationRole.RoleName.SellerAdmin,
        chevre.factory.role.organizationRole.RoleName.TicketClerk,
        chevre.factory.role.organizationRole.RoleName.TicketCollector,
        chevre.factory.role.organizationRole.RoleName.User
    ];
    for (const roleName of roleNames) {
        const result = await roleRepo.addMember({
            roleName,
            member: { typeOf: chevre.factory.personType.Person },
            memberOf: { typeOf: chevre.factory.organizationType.Project }
        });
        console.log(result, roleName);
    }

    roleNames = [
        chevre.factory.role.organizationRole.RoleName.SellersIAMRoleAdmin,
        chevre.factory.role.organizationRole.RoleName.SellersInventoryManager,
        chevre.factory.role.organizationRole.RoleName.SellersOwner
    ];
    for (const roleName of roleNames) {
        const result = await roleRepo.addMember({
            roleName,
            member: { typeOf: chevre.factory.personType.Person },
            memberOf: { typeOf: chevre.factory.organizationType.Corporation }
        });
        console.log(result, roleName);
    }
}

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