<?php

namespace Xentral\Modules\Api\Router;

class RouterResult
{
    /** @var string $resourceClass */
    protected $resourceClass;

    /** @var string $controllerClass */
    protected $controllerClass;

    /** @var string $controllerAction */
    protected $controllerAction;

    /** @var array $params */
    protected $params;

    /** @var string|null $params */
    protected $permission;

    /**
     * @param string      $version
     * @param string      $resource
     * @param string      $controller
     * @param string      $action
     * @param array       $params
     * @param string|null $permission
     */
    public function __construct($version, $resource, $controller, $action, array $params = array(), ?string $permission = null)
    {
        $this->resourceClass = sprintf('Xentral\Modules\Api\Resource\%sResource', $resource);
        $this->controllerClass = sprintf('Xentral\Modules\Api\Controller\%s\%sController', $version, $controller);
        $this->controllerAction = $action;
        $this->params = $params;
        $this->permission = $permission;
    }

    /**
     * @return string
     */
    public function getResourceClass()
    {
        return $this->resourceClass;
    }

    /**
     * @return string
     */
    public function getControllerClass()
    {
        return $this->controllerClass;
    }

    /**
     * @return string
     */
    public function getControllerAction()
    {
        return $this->controllerAction;
    }

    /**
     * @return array
     */
    public function getRouterParams()
    {
        return $this->params;
    }

    /**
     * @return string|null
     */
    public function getPermission()
    {
        return $this->permission;
    }

    /**
     * @return array
     */
    public function toArray()
    {
        return [
            'controllerClass'  => $this->getControllerClass(),
            'controllerAction' => $this->getControllerAction(),
            'resourceClass'    => $this->getResourceClass(),
            'routerParams'     => $this->getRouterParams(),
            'permission'       => $this->getPermission(),
        ];
    }
}