'use strict';


function dump(arg) {
  function _dump(indent, obj) {
    var any = 0;
    if (typeof obj != 'string') {
      for (var i in obj) {
        _dump((indent ? indent + '.' : '') + i, obj[i]);
        any++;
      }
    }
    if (!any) {
      print(indent + ' = ' + obj);
    }
  }
  _dump('', arg);
}


// load the 'afterquery' object for testing
load('render.js');


// fake gviz library implementation
var google = {
  visualization: {
    DataTable: function(t) { return t; }
  }
};


wvtest('parseArgs', function() {
  var query = '?a=b&c=d&e==f&&g=h&g=i%25%31%31&a=&a=x';
  var args = afterquery.parseArgs(query);
  WVPASSEQ(args.all.join('|'), 'a,b|c,d|e,=f|,|g,h|g,i%11|a,|a,x');
  WVPASSEQ(args.get('a'), 'x');
  WVPASSEQ(args.get(''), '');
  WVPASSEQ(args.get('g'), 'i%11');

  WVPASSEQ(afterquery.parseArgs('').all.join('|'), ',');
  WVPASSEQ(afterquery.parseArgs('?').all.join('|'), ',');
  WVPASSEQ(afterquery.parseArgs('abc=def').all.join('|'), 'abc,def');
});


wvtest('argsToArray', function() {
  var x = function() {
    return afterquery.internal.argsToArray(arguments);
  };
  WVPASSEQ(x(1,2,3), [1,2,3]);
  WVPASSEQ(x(1,2,3).slice(1), [2,3]);
});


// Fake setTimeout function for testing runqueue().  Just execute the
// requested function immediately.
function setTimeout(func, when) {
  func();
}


wvtest('queue', function() {
  var queue = [];
  var vfinal = 'never-assigned';
  afterquery.internal.enqueue(queue, 'step1', function(v, done) {
    done(v + '1');
  });
  afterquery.internal.enqueue(queue, 'step2', function(v, done) {
    done(v + '2');
  });
  afterquery.internal.runqueue(queue, 'foo', function(v) {
    vfinal = v;
  });
  WVPASSEQ(vfinal, 'foo12');
});


wvtest('dataToGvizTable', function() {
  var grid = {
    headers: ['a', 'b', 'c', 'd', 'e'],
    types: ['number', 'date', 'datetime', 'bool', 'string'],
    data: [
      [null, null, null, null, null],
      [0, 1, 2, 3, 4],
      [1.5, '2012-11-15 01:23', '2013-12-16 01:24:25', false, 'hello']
    ]
  };
  var dt = afterquery.internal.dataToGvizTable(grid, {});
  dump(dt);
  WVPASSEQ(dt.cols.length, 5);
  WVPASSEQ(dt.rows.length, 3);
  for (var i in dt.cols) {
    WVPASSEQ(dt.cols[i].id, ['a', 'b', 'c', 'd', 'e'][i]);
    WVPASSEQ(dt.cols[i].label, dt.cols[i].id);
    WVPASSEQ(dt.cols[i].type,
             ['number', 'date', 'datetime', 'bool', 'string'][i]);
  }
  for (var coli in dt.rows[0]) {
    print('row', 0, 'col', coli);
    WVPASSEQ(dt.rows[0].c[coli], null);
  }
  for (var rowi = 1; rowi < dt.rows.length; rowi++) {
    for (var coli in dt.rows[rowi].c) {
      print('row', rowi, 'col', coli);
      WVPASSEQ(dt.rows[rowi].c[coli].v, grid.data[rowi][coli]);
    }
  }
});


wvtest('delta', function() {
  var grid = {
    headers: ['a', 'b'],
    types: ['number', 'number'],
    data: [
      [0, 1],
      [5, 7],
      [30, 1],
      [2, 1],
      [2, 1],
    ]
  };
  var dt = afterquery.internal.deltaBy(grid, 'a');
  dump(dt);
  WVPASSEQ(dt.data.length, 5);
  WVPASSEQ(dt.data[0][0], 0);
  WVPASSEQ(dt.data[0][1], 1);
  WVPASSEQ(dt.data[1][0], 5);
  WVPASSEQ(dt.data[1][1], 7);
  WVPASSEQ(dt.data[2][0], 25);
  WVPASSEQ(dt.data[2][1], 1);
  WVPASSEQ(dt.data[3][0], 2);
  WVPASSEQ(dt.data[3][1], 1);
  WVPASSEQ(dt.data[4][0], undefined);
  WVPASSEQ(dt.data[4][1], 1);
});



wvtest('unselect', function() {
  var grid = {
    headers: ['a', 'b', 'c'],
    types: ['number', 'number', 'number'],
    data: [
      [1, 2, 3],
      [4, 5, 6],
      [7, 8, 9],
      [10, 11, 12],
      [13, 14, 15],
    ]
  };
  var dt = afterquery.internal.unselectBy(grid, 'b');
  dump(dt);
  WVPASSEQ(dt.headers.length, 2);
  WVPASSEQ(dt.headers[0], 'a');
  WVPASSEQ(dt.headers[1], 'c');
  WVPASSEQ(dt.types.length, 2);
  WVPASSEQ(dt.types[0], 'number');
  WVPASSEQ(dt.types[1], 'number');
  WVPASSEQ(dt.data.length, 5);
  WVPASSEQ(dt.data[0].length, 2);
  WVPASSEQ(dt.data[0][0], 1);
  WVPASSEQ(dt.data[0][1], 3);
  WVPASSEQ(dt.data[1].length, 2);
  WVPASSEQ(dt.data[1][0], 4);
  WVPASSEQ(dt.data[1][1], 6);
  WVPASSEQ(dt.data[2].length, 2);
  WVPASSEQ(dt.data[2][0], 7);
  WVPASSEQ(dt.data[2][1], 9);
  WVPASSEQ(dt.data[3].length, 2);
  WVPASSEQ(dt.data[3][0], 10);
  WVPASSEQ(dt.data[3][1], 12);
  WVPASSEQ(dt.data[4].length, 2);
  WVPASSEQ(dt.data[4][0], 13);
  WVPASSEQ(dt.data[4][1], 15);
});



wvtest('guessTypes', function() {
  var data1 = [['1999-01-01', '1999-02-02', 1, 2.5, false, 'foo']];
  var data2 = [['1999-01-01', '1999-02-02 12:34', 2, 'x', true, null]];
  var datanull = [[null, null, null, null]];
  var guessTypes = afterquery.internal.guessTypes;
  WVPASSEQ(guessTypes([]), []);
  WVPASSEQ(guessTypes([[5]]), ['number']);
  WVPASSEQ(guessTypes([[null]]), ['boolean']);
  WVPASSEQ(guessTypes([['2012']]), ['number']);
  WVPASSEQ(guessTypes([['2012-01']]), ['date']);
  WVPASSEQ(guessTypes([['2012/01']]), ['date']);
  WVPASSEQ(guessTypes([['2012/01-02']]), ['date']);
  WVPASSEQ(guessTypes([['2012/01/01 23:45']]), ['datetime']);
  WVPASSEQ(guessTypes([['2012-01/01 23:45:67']]), ['datetime']);
  WVPASSEQ(guessTypes([['2012/01/01T23:45:67']]), ['datetime']);
  WVPASSEQ(guessTypes([['2012-01-01T23:45:67']]), ['datetime']);
  WVPASSEQ(guessTypes([['2012/01/01 23:45:67.12']]), ['string']);
  WVPASSEQ(guessTypes([['Date(2012,2,3)']]), ['date']);
  WVPASSEQ(guessTypes([['Date(2012,2,3,4)']]), ['datetime']);
  WVPASSEQ(guessTypes([['Date(2012,2,3,4,5,6)']]), ['datetime']);
  WVPASSEQ(guessTypes([['Date(2012,2,3,4,5,6,7)']]), ['datetime']);
  WVPASSEQ(guessTypes([['Date(2012,2,3,4,5,6,7,8)']]), ['string']);
  WVPASSEQ(guessTypes([['Date(2012,x,1)']]), ['string']);
  WVPASSEQ(guessTypes(data1),
           ['date', 'date', 'boolean', 'number', 'boolean', 'string']);
  WVPASSEQ(guessTypes(data2),
           ['date', 'datetime', 'number', 'string', 'boolean', 'boolean']);
  WVPASSEQ(guessTypes(data1.concat(data2)),
           ['date', 'datetime', 'number', 'string', 'boolean', 'string']);
  WVPASSEQ(guessTypes(data2.concat(data1)),
           ['date', 'datetime', 'number', 'string', 'boolean', 'string']);
  WVPASSEQ(guessTypes(data2.concat(datanull)
                                          .concat(data1)),
           ['date', 'datetime', 'number', 'string', 'boolean', 'string']);
  WVPASSEQ(guessTypes(data2.concat(datanull)),
           ['date', 'datetime', 'number', 'string', 'boolean', 'boolean']);
});


wvtest('urlMinusPath', function() {
  WVPASSEQ(afterquery.internal.urlMinusPath('http://x/y/z'),
           'http://x');
  WVPASSEQ(afterquery.internal.urlMinusPath('https://u:p@host:port/y/z'),
           'https://u:p@host:port');
  WVPASSEQ(afterquery.internal.urlMinusPath('http:foo/blah//whatever'),
           'http:');
  WVPASSEQ(afterquery.internal.urlMinusPath('foo/blah//whatever'),
           'foo/blah//whatever');
  WVPASSEQ(afterquery.internal.urlMinusPath('//foo/blah//whatever'),
           '//foo');
});


function _gridAsText(grid) {
  return [].concat(grid.headers, grid.types, grid.data);
}


wvtest('gridFromData', function() {
  var rawdata = [
    ['a', 'b', 'c', 'd', 'e', 'f'],
    [1, 2, 3,
     '2012-1-1 2:03:04', 'Date(2013,0,2,3,4,5)', new Date(2014,0,3,4,5,6)]
  ];
  var otherdata = [
    ['a', 'b', 'c'],
    [1, 2, 4,
     '2012-1-1 2:03:04', 'Date(2013,0,2,3,4,5)', new Date(2014,0,3,4,5,6)]
  ];
  var grid = {
    headers: ['a', 'b', 'c', 'd', 'e', 'f'],
    data: [[1, 2, 3,
            new Date(2012,0,1,2,3,4),
            new Date(2013,0,2,3,4,5), new Date(2014,0,3,4,5,6)]],
    types: ['boolean', 'number', 'number', 'datetime', 'datetime', 'datetime']
  };
  var gtext = _gridAsText(grid);
  WVPASSEQ(_gridAsText(afterquery.internal.gridFromData(grid)), gtext);
  WVPASSEQ(_gridAsText(afterquery.internal.gridFromData(rawdata)), gtext);
  WVPASSNE(_gridAsText(afterquery.internal.gridFromData(otherdata)), gtext);
});


wvtest('exec', function() {
  var rawdata = [
    ['a', 'b', 'c'],
    [1, 2, 3],
    [1, 5, 6],
    [1, 5, 9]
  ];
  afterquery.exec('group=a;', rawdata, function(grid) {
    WVPASSEQ(grid.data, [[1]]);
  });
  afterquery.exec('group=a,b;count(c)&group=a', rawdata, function(grid) {
    WVPASSEQ(grid.data, [[1, 7, 3]]);
  });
  afterquery.exec(['group=a,b;count(c)', 'pivot=a;b;c'], rawdata,
		  function(grid) {
    WVPASSEQ(grid.data, [[1, 1, 2]]);
  });
});

wvtest('pivot', function() {
  var rawdata = [
    ['a', 'b', 'c'],
    ['fred', 9, '2013/01/02'],
    ['bob', 7, '2013/01/01'],
    ['fred', 11, '2013/02/03']
  ];
  var mpd = afterquery.internal.myParseDate;
  var dlist = [mpd('2013/01/02'), mpd('2013/01/01'), mpd('2013/02/03')];
  afterquery.exec('group=a,b;only(c),count(c),sum(c),min(c),max(c),' +
                  'avg(c),median(c),stddev(c)', rawdata, function(grid) {
    WVPASSEQ(grid.headers, ['a', 'b', 'c', 'c', 'c', 'c', 'c', 'c', 'c', 'c']);
    WVPASSEQ(grid.data, [
      ['fred', 9, dlist[0], 1, 0, dlist[0], dlist[0], 0, dlist[0], 0],
      ['bob', 7, dlist[1], 1, 0, dlist[1], dlist[1], 0, dlist[1], 0],
      ['fred', 11, dlist[2], 1, 0, dlist[2], dlist[2], 0, dlist[2], 0]
    ]);
  });
  afterquery.exec('group=;count(b),sum(b),min(b),max(b),' +
                  'avg(b),median(b),stddev(b)', rawdata, function(grid) {
    WVPASSEQ(grid.headers, ['b', 'b', 'b', 'b', 'b', 'b', 'b']);
    WVPASSEQ(grid.data, [[3, 27, 7, 11, 27.0/3.0, 9, Math.sqrt(8)]]);
  });
  afterquery.exec('pivot=a;b;only(c)', rawdata, function(grid) {
    WVPASSEQ(grid.headers, ['a', 9, 7, 11]);
    WVPASSEQ(grid.types, [
      afterquery.T_STRING,
      afterquery.T_DATE,
      afterquery.T_DATE,
      afterquery.T_DATE
    ]);
    WVPASSEQ(grid.data, [
      ['fred', dlist[0], null, dlist[2]],
      ['bob', null, dlist[1], null]
    ]);
  });
  afterquery.exec('pivot=a;b;c', rawdata, function(grid) {
    WVPASSEQ(grid.headers, ['a', 9, 7, 11]);
    WVPASSEQ(grid.types, [
      afterquery.T_STRING,
      afterquery.T_NUM,
      afterquery.T_NUM,
      afterquery.T_NUM
    ]);
    WVPASSEQ(grid.data, [
      ['fred', 1, null, 1],
      ['bob', null, 1, null]
    ]);
  });
  afterquery.exec('pivot=a;b;only(c),count(c)', rawdata, function(grid) {
    WVPASSEQ(grid.headers, [
      'a',
      '9 only(c)', '9 count(c)',
      '7 only(c)', '7 count(c)',
      '11 only(c)', '11 count(c)'
    ]);
    WVPASSEQ(grid.data, [
      ['fred', dlist[0], 1, null, null, dlist[2], 1],
      ['bob', null, null, dlist[1], 1, null, null]
    ]);
  });
  afterquery.exec('pivot=a;b,c;count(*)', rawdata, function(grid) {
    WVPASSEQ(grid.headers, [
      'a',
      '9 2013-01-02',
      '7 2013-01-01',
      '11 2013-02-03'
    ]);
    WVPASSEQ(grid.data, [
      ['fred', 1, null, 1],
      ['bob', null, 1, null]
    ]);
  });
});
