<?php

namespace Faker\Provider\en_NZ;

class PhoneNumber extends \Faker\Provider\PhoneNumber
{
    /**
     * An array of en_NZ landline phone number formats
     * @var array
     */
    protected static $formats = array(
        // National Calls
        '{{area_code}}{{beginning_number}}######',
        '{{area_code}} {{beginning_number}}## ####'
    );

    /**
     * An array of en_NZ mobile (cell) phone number formats
     * @var array
     */
    protected static $mobileFormats = array(
        // Local
        '02########',
        '02#########',
        '02# ### ####',
        '02# #### ####'
    );

    /**
     * An array of toll free phone number formats
     * @var array
     */
    protected static $tollFreeFormats = array(
        '0508######',
        '0508 ######',
        '0508 ### ###',
        '0800######',
        '0800 ######',
        '0800 ### ###',
    );

    /**
     * An array of en_NZ landline area codes
     * @var array
     */
    protected static $areaCodes = array(
        '02', '03', '04', '06', '07', '09'
    );

    /**
     * An array of en_NZ landline beginning numbers
     * @var array
     */
    protected static $beginningNumbers = array(
        '2', '3', '4', '5', '6', '7', '8', '9'
    );

    /**
     * Return a en_NZ landline phone number
     * @return string
     */
    public static function phoneNumber()
    {
        $format = static::numerify(static::randomElement(static::$formats));

        $withAreaCode = str_replace('{{area_code}}', static::areaCode(), $format);

        return str_replace('{{beginning_number}}', static::beginningNumber(), $withAreaCode);
    }

    /**
     * Return a en_NZ mobile phone number
     * @return string
     */
    public static function mobileNumber()
    {
        return static::numerify(static::randomElement(static::$mobileFormats));
    }

    /**
     * Return a en_NZ toll free phone number
     * @return string
     */
    public static function tollFreeNumber()
    {
        return static::numerify(static::randomElement(static::$tollFreeFormats));
    }

    /**
     * Return a en_NZ landline area code
     * @return string
     */
    public static function areaCode()
    {
        return static::numerify(static::randomElement(static::$areaCodes));
    }

    /**
     * Return a en_NZ landline beginning number
     * @return string
     */
    public static function beginningNumber()
    {
        return static::numerify(static::randomElement(static::$beginningNumbers));
    }
}