/*!
 * paymentack.js - bip70 paymentack for bcoin
 * Copyright (c) 2016, Christopher Jeffrey (MIT License).
 * https://github.com/bcoin-org/bcoin
 */

'use strict';

var assert = require('assert');
var protobuf = require('./protobuf');
var Payment = require('./payment');
var ProtoReader = protobuf.ProtoReader;
var ProtoWriter = protobuf.ProtoWriter;

function PaymentACK(options) {
  if (!(this instanceof PaymentACK))
    return new PaymentACK(options);

  this.payment = new Payment();
  this.memo = null;

  if (options)
    this.fromOptions(options);
}

PaymentACK.prototype.fromOptions = function fromOptions(options) {
  if (options.payment)
    this.payment.fromOptions(options.payment);

  if (options.memo != null) {
    assert(typeof options.memo === 'string');
    this.memo = options.memo;
  }

  return this;
};

PaymentACK.fromOptions = function fromOptions(options) {
  return new PaymentACK().fromOptions(options);
};

PaymentACK.prototype.fromRaw = function fromRaw(data) {
  var p = new ProtoReader(data);

  this.payment.fromRaw(p.readFieldBytes(1));
  this.memo = p.readFieldString(2, true);

  return this;
};

PaymentACK.fromRaw = function fromRaw(data, enc) {
  if (typeof data === 'string')
    data = new Buffer(data, enc);
  return new PaymentACK().fromRaw(data);
};

PaymentACK.prototype.toRaw = function toRaw(writer) {
  var p = new ProtoWriter(writer);

  p.writeFieldBytes(1, this.payment.toRaw());

  if (this.memo != null)
    p.writeFieldString(2, this.memo);

  if (!writer)
    p = p.render();

  return p;
};

module.exports = PaymentACK;
