/**
 * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 */

import Csv from '../csv/parser'
import { Run } from 'mol-task';

const csvStringBasic = `StrCol,IntCol,FloatCol
# comment
string1,-1,-0.34e3
string2,42,2.44`

const csvStringAdvanced = `StrCol,"Int Col",FloatCol
 string1  \t , -1,  -0.34e3
    # comment
   " stri
ng2" ,42, 2.44 `

const tabString = `StrCol\tIntCol\tFloatCol
string1\t-1\t-0.34e3
string2\t42\t2.44`

describe('csv reader', () => {
    it('basic', async () => {
        const parsed = await Run(Csv(csvStringBasic));
        if (parsed.isError) return;
        const csvFile = parsed.result;

        // csvFile.table.columnNames.forEach(name => {
        //     const col = csvFile.table.getColumn(name)
        //     if (col) console.log(name, col.toStringArray())
        // })

        const strCol = csvFile.table.getColumn('StrCol')
        if (strCol) expect(strCol.toStringArray()).toEqual(['string1', 'string2'])

        const intCol = csvFile.table.getColumn('IntCol')
        if (intCol) expect(intCol.toIntArray()).toEqual([-1, 42])

        const floatCol = csvFile.table.getColumn('FloatCol')
        if (floatCol) expect(floatCol.toFloatArray()).toEqual([-340.0, 2.44])

        expect.assertions(3)
    });

    it('advanced', async () => {
        const parsed = await Run(Csv(csvStringAdvanced));
        if (parsed.isError) return;
        const csvFile = parsed.result;

        const strCol = csvFile.table.getColumn('StrCol')
        if (strCol) expect(strCol.toStringArray()).toEqual(['string1', ' stri\nng2'])

        const intCol = csvFile.table.getColumn('Int Col')
        if (intCol) expect(intCol.toIntArray()).toEqual([-1, 42])

        const floatCol = csvFile.table.getColumn('FloatCol')
        if (floatCol) expect(floatCol.toFloatArray()).toEqual([-340.0, 2.44])

        expect.assertions(3)
    });

    it('tabs', async () => {
        const parsed = await Run(Csv(tabString, { delimiter: '\t' }));
        if (parsed.isError) return;
        const csvFile = parsed.result;

        const strCol = csvFile.table.getColumn('StrCol')
        if (strCol) expect(strCol.toStringArray()).toEqual(['string1', 'string2'])

        const intCol = csvFile.table.getColumn('IntCol')
        if (intCol) expect(intCol.toIntArray()).toEqual([-1, 42])

        const floatCol = csvFile.table.getColumn('FloatCol')
        if (floatCol) expect(floatCol.toFloatArray()).toEqual([-340.0, 2.44])

        expect.assertions(3)
    });
});