<?php

final class PHUIStatusItemView extends AphrontTagView {

  private $icon;
  private $iconLabel;
  private $iconColor;
  private $target;
  private $note;
  private $highlighted;

  const ICON_ACCEPT = 'fa-check-circle';
  const ICON_REJECT = 'fa-times-circle';
  const ICON_LEFT = 'fa-chevron-circle-left';
  const ICON_RIGHT = 'fa-chevron-circle-right';
  const ICON_UP = 'fa-chevron-circle-up';
  const ICON_DOWN = 'fa-chevron-circle-down';
  const ICON_QUESTION = 'fa-question-circle';
  const ICON_WARNING = 'fa-exclamation-circle';
  const ICON_INFO = 'fa-info-circle';
  const ICON_ADD = 'fa-plus-circle';
  const ICON_MINUS = 'fa-minus-circle';
  const ICON_OPEN = 'fa-circle-o';
  const ICON_CLOCK = 'fa-clock-o';
  const ICON_STAR = 'fa-star';

  public function setIcon($icon, $color = null, $label = null) {
    $this->icon = $icon;
    $this->iconLabel = $label;
    $this->iconColor = $color;
    return $this;
  }

  public function setTarget($target) {
    $this->target = $target;
    return $this;
  }

  public function setNote($note) {
    $this->note = $note;
    return $this;
  }

  public function setHighlighted($highlighted) {
    $this->highlighted = $highlighted;
    return $this;
  }

  protected function canAppendChild() {
    return false;
  }

  protected function getTagName() {
    return 'tr';
  }

  protected function getTagAttributes() {
    $classes = array();
    if ($this->highlighted) {
      $classes[] = 'phui-status-item-highlighted';
    }

    return array(
      'class' => $classes,
    );
  }

  protected function getTagContent() {

    $icon = null;
    if ($this->icon) {
      $icon = id(new PHUIIconView())
        ->setIcon($this->icon.' '.$this->iconColor);

      if ($this->iconLabel) {
        Javelin::initBehavior('phabricator-tooltips');
        $icon->addSigil('has-tooltip');
        $icon->setMetadata(
          array(
            'tip' => $this->iconLabel,
            'size' => 240,
          ));
      }
    }

    $icon_cell = phutil_tag(
      'td',
      array(),
      $icon);

    $target_cell = phutil_tag(
      'td',
      array(
        'class' => 'phui-status-item-target',
      ),
      $this->target);

    $note_cell = phutil_tag(
      'td',
      array(
        'class' => 'phui-status-item-note',
      ),
      $this->note);

    return array(
      $icon_cell,
      $target_cell,
      $note_cell,
    );
  }
}