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

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

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

    const issuerRepo = await chevre.repository.Issuer.createInstance(mongoose.connection);

    const cursor = issuerRepo.getCursor(
        {
            // 'project.id': { $ne: EXCLUDED_PROJECT_ID }
        },
        {
            _id: 1,
            project: 1,
            identifier: 1,
            url: 1,
            name: 1
        }
    );
    console.log('docs found');

    let i = 0;
    let updateCount = 0;
    await cursor.eachAsync(async (doc) => {
        i += 1;
        const issuer: chevre.factory.issuer.IIssuer = doc.toObject();

        const alreadyMigrated = typeof issuer.url === 'string';

        if (alreadyMigrated) {
            console.log(
                'already migrated.',
                issuer.id, issuer.project.id, issuer.identifier, i);
        } else {
            console.log(
                'updating...',
                issuer.id, issuer.project.id, issuer.identifier, i);
            await issuerRepo.saveIssuer({
                id: issuer.id,
                identifier: issuer.identifier,
                name: { ja: issuer.identifier },
                project: issuer.project,
                url: issuer.identifier
            });
            updateCount += 1;
            console.log(
                'updated.',
                issuer.id, issuer.project.id, issuer.identifier, i);
        }
    });

    console.log(i, 'docs checked');
    console.log(updateCount, 'docs updated');
}

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