'use strict';

var chai = chai || require('chai');
var bitcore = bitcore || require('../bitcore');

var should = chai.should();
var testdata = testdata || require('./testdata');

var ScriptInterpreterModule = bitcore.ScriptInterpreter;
var Script = bitcore.Script;
var ScriptInterpreter;

describe('ScriptInterpreter', function() {
  it('should initialze the main object', function() {
    should.exist(ScriptInterpreterModule);
  });
  it('should be able to create class', function() {
    ScriptInterpreter = ScriptInterpreterModule;
    should.exist(ScriptInterpreter);
  });
  it('should be able to create instance', function() {
    var si = new ScriptInterpreter();
    should.exist(si);
  });
  var i = 0;
  testdata.dataScriptValid.forEach(function(datum) {
    if (datum.length < 2) throw new Error('Invalid test data');
    var scriptSig = datum[0]; // script inputs
    var scriptPubKey = datum[1]; // output script
    var human = scriptSig + ' ' + scriptPubKey;
    it.skip('should validate script ' + human, function(done) {
      i++;
      console.log(i + ' ' + human);
      ScriptInterpreter.verify(Script.fromHumanReadable(scriptSig),
        Script.fromHumanReadable(scriptPubKey),
        null, 0, 0, // tx, output index, and hashtype
        function (err, result) {
          should.not.exist(err);
          result.should.equal(true);
          done();
        }
      );
    });
  });
});