require('classtool');

function ClassSpec(b) {
  var coinUtil = require('./util/util');
  var timeUtil = require('./util/time');
  var KeyModule = require('./Key');
  var PrivateKey = require('./PrivateKey').class();
  var Address = require('./Address').class();

  function WalletKey(cfg) {
    this.network = cfg.network; // required
    this.created = cfg.created;
    this.privKey = cfg.privKey;
  };

  WalletKey.prototype.generate = function() {
    this.privKey = KeyModule.Key.generateSync();
    this.created = timeUtil.curtime();
  };

  WalletKey.prototype.storeObj = function() {
    var pubKey = this.privKey.public.toString('hex');
    var pubKeyHash = coinUtil.sha256ripe160(this.privKey.public);
    var addr = new Address(this.network.addressPubkey, pubKeyHash);
    var priv = new PrivateKey(this.network.keySecret, this.privKey.private, this.privKey.compressed);
    var obj = {
      created: this.created,
      priv: priv.toString(),
      pub: pubKey,
      addr: addr.toString(),
    };

    return obj;
  };

  WalletKey.prototype.fromObj = function(obj) {
    this.created = obj.created;
    this.privKey = new KeyModule.Key();
    if (obj.priv.length==64) {
      this.privKey.private = new Buffer(obj.priv,'hex');
      this.privKey.compressed = true;
    }
    else {
      var priv = new PrivateKey(obj.priv);
      this.privKey.private = new Buffer(priv.payload());
      this.privKey.compressed = priv.compressed();
    }
    this.privKey.regenerateSync();
  };

  return WalletKey;
};
module.defineClass(ClassSpec);