/**
 * textbox.js - textbox element for blessed
 * Copyright (c) 2013-2015, Christopher Jeffrey and contributors (MIT License).
 * https://github.com/chjj/blessed
 */

/**
 * Modules
 */

const Node = require('./node')
const Textarea = require('./textarea')

/**
 * Textbox
 */

function Textbox(options) {
  if (!(this instanceof Node)) {
    return new Textbox(options)
  }

  options = options || {}

  options.scrollable = false

  Textarea.call(this, options)

  this.secret = options.secret
  this.censor = options.censor
}

Object.setPrototypeOf(Textbox.prototype, Textarea.prototype)

Textbox.prototype.type = 'textbox'

Textbox.prototype.__olistener = Textbox.prototype._listener
Textbox.prototype._listener = function (ch, key) {
  if (key.name === 'enter') {
    this._done(null, this.value)
    return
  }
  return this.__olistener(ch, key)
}

Textbox.prototype.setValue = function (value) {
  let visible, val
  if (value == null) {
    value = this.value
  }
  if (this._value !== value) {
    value = value.replace(/\n/g, '')
    this.value = value
    this._value = value
    if (this.secret) {
      this.setContent('')
    } else if (this.censor) {
      this.setContent(Array(this.value.length + 1).join('*'))
    } else {
      visible = -(this.width - this.iwidth - 1)
      val = this.value.replace(/\t/g, this.screen.tabc)
      this.setContent(val.slice(visible))
    }
    this._updateCursor()
  }
}

Textbox.prototype.submit = function () {
  if (!this.__listener) {
    return
  }
  return this.__listener('\r', { name: 'enter' })
}

/**
 * Expose
 */

module.exports = Textbox
