<?php



/*

 * This file is part of the Prophecy.

 * (c) Konstantin Kudryashov <ever.zet@gmail.com>

 *     Marcello Duarte <marcello.duarte@gmail.com>

 *

 * For the full copyright and license information, please view the LICENSE

 * file that was distributed with this source code.

 */



namespace Prophecy\Doubler;



use ReflectionClass;



/**

 * Name generator.

 * Generates classname for double.

 *

 * @author Konstantin Kudryashov <ever.zet@gmail.com>

 */

class NameGenerator

{

    private static $counter = 1;



    /**

     * Generates name.

     *

     * @param ReflectionClass   $class

     * @param ReflectionClass[] $interfaces

     *

     * @return string

     */

    public function name(ReflectionClass $class = null, array $interfaces)

    {

        $parts = array();



        if (null !== $class) {

            $parts[] = $class->getName();

        } else {

            foreach ($interfaces as $interface) {

                $parts[] = $interface->getShortName();

            }

        }



        if (!count($parts)) {

            $parts[] = 'stdClass';

        }



        return sprintf('Double\%s\P%d', implode('\\', $parts), self::$counter++);

    }

}

