
import chai from 'chai';
import assertArrays from 'chai-arrays';
chai.use(assertArrays);
const expect = chai.expect;

import PsyduckQuotes, { commandOptions } from '../source';

const extractUserIdRuns = [
    { options: { user: '<@344587711396708357>' }, expected: '344587711396708357' },
    { options: { user: '<@1234567890>' }, expected: '1234567890' },
    { options: { user: '<@9999911119919191>' }, expected: '9999911119919191' },
    { options: { user: '<@0987654321>' }, expected: '0987654321' },
    { options: { user: '<@6758493021>' }, expected: '6758493021' },
    { options: { user: '<@11223344556677889900>' }, expected: '11223344556677889900' },
    { options: { user: '<@121314151617181910>' }, expected: '121314151617181910' },
    { options: { user: '<@657574848393929291010>' }, expected: '657574848393929291010' },
    { options: { user: '<@11991199119911>' }, expected: '11991199119911' },
    { options: { user: '<@13141415151616>' }, expected: '13141415151616' }
];

const parseParametersRuns = [
    { parameterString: '!q <@344587711396708357> -p 3', expected: ['<@344587711396708357>', '-p', '3'] },
    { parameterString: '!quote <@1234567890> -p 4', expected: ['<@1234567890>', '-p', '4'] },
    { parameterString: '!q <@9999911119919191> --pluck 1', expected: ['<@9999911119919191>', '--pluck', '1'] },
    { parameterString: '!quote <@0987654321> -p 8', expected: ['<@0987654321>', '-p', '8'] },
    { parameterString: '!r <@6758493021>', expected: ['<@6758493021>'] },
    { parameterString: '!random <@11223344556677889900>', expected: ['<@11223344556677889900>'] },
    { parameterString: '!r <@121314151617181910>', expected: ['<@121314151617181910>'] },
    { parameterString: '!random <@657574848393929291010>', expected: ['<@657574848393929291010>'] },
    { parameterString: '!r <@11991199119911>', expected: ['<@11991199119911>'] },
    { parameterString: '!q <@13141415151616> -p 9', expected: ['<@13141415151616>', '-p', '9'] }
];

const hydrateOptionsRuns = [
    { params: ['<@344587711396708357>', '-p', '3'], expected: { user: '<@344587711396708357>', pluck: 3 } },
    { params: ['<@1234567890>', '-p', '4'], expected: { user: '<@1234567890>', pluck: 4 } },
    { params: ['<@9999911119919191>', '--pluck', '1'], expected: { user: '<@9999911119919191>', pluck: 1 } },
    { params: ['<@0987654321>', '-p', '8'], expected: { user: '<@0987654321>', pluck: 8 } },
    { params: ['<@6758493021>'], expected: { user: '<@6758493021>' } },
    { params: ['<@11223344556677889900>'], expected: { user: '<@11223344556677889900>' } },
    { params: ['<@121314151617181910>'], expected: { user: '<@121314151617181910>' } },
    { params: ['<@657574848393929291010>'], expected: { user: '<@657574848393929291010>' } },
    { params: ['<@11991199119911>'], expected: { user: '<@11991199119911>' } },
    { params: ['<@13141415151616>', '-p', '9'], expected: { user: '<@13141415151616>', pluck: 9 } }
];

describe('Quote Plugin', () => {
    describe('extractUserId()', () => {
        extractUserIdRuns.forEach(run => {
            it('Should parse the discord user id out of a mention block', () => {
                const plugin = new PsyduckQuotes({});
                expect(plugin.extractUserId(run.options.user)).to.equal(run.expected);
            });
        });
    });
});