<?php

/*
 * This file is part of SwiftMailer.
 * (c) 2004-2009 Chris Corbyn
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * A MIME Header.
 * @package Swift
 * @subpackage Mime
 * @author Chris Corbyn
 */
interface Swift_Mime_Header
{

  /** Text headers */
  const TYPE_TEXT = 2;

  /** Parameterized headers (text + params) */
  const TYPE_PARAMETERIZED = 6;

  /** Mailbox and address headers */
  const TYPE_MAILBOX = 8;

  /** Date and time headers */
  const TYPE_DATE = 16;

  /** Identification headers */
  const TYPE_ID = 32;

  /** Address path headers */
  const TYPE_PATH = 64;

  /**
   * Get the type of Header that this instance represents.
   * @return int
   * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX
   * @see TYPE_DATE, TYPE_ID, TYPE_PATH
   */
  public function getFieldType();

  /**
   * Set the model for the field body.
   * The actual types needed will vary depending upon the type of Header.
   * @param mixed $model
   */
  public function setFieldBodyModel($model);

  /**
   * Set the charset used when rendering the Header.
   * @param string $charset
   */
  public function setCharset($charset);

  /**
   * Get the model for the field body.
   * The return type depends on the specifics of the Header.
   * @return mixed
   */
  public function getFieldBodyModel();

  /**
   * Get the name of this header (e.g. Subject).
   * The name is an identifier and as such will be immutable.
   * @return string
   */
  public function getFieldName();

  /**
   * Get the field body, prepared for folding into a final header value.
   * @return string
   */
  public function getFieldBody();

  /**
   * Get this Header rendered as a compliant string.
   * @return string
   */
  public function toString();

}
