<?php
/**
 *
 * This file is part of the Aura Project for PHP.
 *
 * @package Aura.Intl
 *
 * @license http://opensource.org/licenses/MIT MIT
 *
 */
namespace Aura\Intl;

/**
 *
 * Message Catalog
 *
 * @package Aura.Intl
 *
 */
class Package
{
    /**
     *
     * Message keys and translations in this package.
     *
     * @var array
     *
     */
    protected $messages;

    /**
     *
     * The name of a fallback package to use when a message key does not
     * exist.
     *
     * @var string
     *
     */
    protected $fallback;

    /**
     *
     * The name of the formatter to use when formatting translated messages.
     *
     * @var string
     *
     */
    protected $formatter;

    /**
     *
     * Constructor.
     *
     * @param string $formatter The name of the formatter to use.
     *
     * @param string $fallback The name of the fallback package to use.
     *
     * @param array $messages The messages in this package.
     *
     */
    public function __construct(
        $formatter      = 'basic',
        $fallback       = null,
        array $messages = []
    ) {
        $this->formatter = $formatter;
        $this->fallback  = $fallback;
        $this->messages  = $messages;
    }

    /**
     *
     * Sets the messages for this package.
     *
     * @param array $messages The messages for this package.
     *
     * @return void
     *
     */
    public function setMessages(array $messages)
    {
        $this->messages = $messages;
    }

    /**
     *
     * Adds one message for this package.
     *
     * @param string $key the key of the message
     *
     * @param string $message the actual message
     *
     * @return void
     *
     */
    public function addMessage($key, $message)
    {
        $this->messages[$key] = $message;
    }

    /**
     *
     * Adds new messages for this package.
     *
     * @param array $messages The messages to add in this package.
     *
     * @return void
     *
     */
    public function addMessages($messages)
    {
        $this->messages = array_merge($this->messages, $messages);
    }

    /**
     *
     * Gets the messages for this package.
     *
     * @return array
     *
     */
    public function getMessages()
    {
        return $this->messages;
    }


    /**
     *
     * Gets the message of the given key for this package.
     *
     * @param string $key the key of the message to return
     *
     * @return mixed The message translation string, or false if not found.
     *
     */
    public function getMessage($key)
    {
        if (isset($this->messages[$key])) {
            return $this->messages[$key];
        }

        return false;
    }

    /**
     *
     * Sets the formatter name for this package.
     *
     * @param string $formatter The formatter name for this package.
     *
     * @return void
     *
     */
    public function setFormatter($formatter)
    {
        $this->formatter = $formatter;
    }

    /**
     *
     * Gets the formatter name for this package.
     *
     * @return string
     *
     */
    public function getFormatter()
    {
        return $this->formatter;
    }

    /**
     *
     * Sets the fallback package name.
     *
     * @param string $fallback The fallback package name.
     *
     * @return void
     *
     */
    public function setFallback($fallback)
    {
        $this->fallback = $fallback;
    }

    /**
     *
     * Gets the fallback package name.
     *
     * @return string
     *
     */
    public function getFallback()
    {
        return $this->fallback;
    }
}
