/*
 * Copyright (C) 2015 - 2018, Daniel Dahan and CosmicMind, Inc. <http://cosmicmind.com>.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *	*	Redistributions of source code must retain the above copyright notice, this
 *		list of conditions and the following disclaimer.
 *
 *	*	Redistributions in binary form must reproduce the above copyright notice,
 *		this list of conditions and the following disclaimer in the documentation
 *		and/or other materials provided with the distribution.
 *
 *	*	Neither the name of CosmicMind nor the names of its
 *		contributors may be used to endorse or promote products derived from
 *		this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

import UIKit

open class ErrorTextField: TextField {
  
  /// The errorLabel UILabel that is displayed.
  @IBInspectable
  public let errorLabel = UILabel()
  
  /// The errorLabel text value.
  @IBInspectable
  open var error: String? {
    get {
      return errorLabel.text
    }
    set(value) {
      errorLabel.text = value
      layoutSubviews()
    }
  }
  
  /// Error text color
  @IBInspectable
  open var errorColor = Color.red.base {
    didSet {
      errorLabel.textColor = errorColor
    }
  }
  
  /// Vertical distance for the errorLabel from the divider.
  @IBInspectable
  open var errorVerticalOffset: CGFloat = 8 {
    didSet {
      layoutSubviews()
    }
  }
  
  /// Hide or show error text.
  open var isErrorRevealed: Bool {
    get {
      return !errorLabel.isHidden
    }
    set {
      errorLabel.isHidden = !newValue
      detailLabel.isHidden = newValue
    }
  }
  
  open override func prepare() {
    super.prepare()
    isErrorRevealed = false
    prepareErrorLabel()
  }
  
  /// Prepares the errorLabel.
  func prepareErrorLabel() {
    errorLabel.font = RobotoFont.regular(with: 12)
    errorLabel.numberOfLines = 0
    errorColor = { errorColor }() // call didSet
    addSubview(errorLabel)
  }
  
  open override func layoutSubviews() {
    super.layoutSubviews()
    layoutBottomLabel(label: errorLabel, verticalOffset: errorVerticalOffset)
  }
  
  open override func apply(theme: Theme) {
    super.apply(theme: theme)
    
    errorColor = theme.error
  }
}
