<?php

namespace Xentral\Modules\Api\Resource;

use Xentral\Components\Database\Database;
use Xentral\Modules\Api\Validator\Validator;

class ResourceManager
{
    /** @var Database $db */
    protected $db;

    /** @var Validator $validator */
    protected $validator;

    /** @var \Api $legacyApi */
    protected $legacyApi;

    /** @var array $resources Beinhaltet erzeugte Instanzen */
    protected $resources = [];

    /**
     * @param Database  $database
     * @param Validator $validator
     * @param \Api      $api
     */
    public function __construct($database, $validator, $api)
    {
        $this->db = $database;
        $this->validator = $validator;
        $this->legacyApi = $api;
    }

    /**
     * Resource erzeugen
     *
     * @param string $className
     *
     * @return AbstractResource
     */
    public function get($className)
    {
        $cleanName = $this->convertClassName($className);

        // Resource erzeugen falls noch nicht vorhanden
        if (!isset($this->resources[$cleanName])) {
            $this->resources[$cleanName] = new $className(
                $this->db,
                $this->validator
            );

            if ($className === ArticleResource::class) {
                $this->resources[$cleanName]->setLegacyApi($this->legacyApi);
            }
        }

        return $this->resources[$cleanName];
    }

    /**
     * @param string $className
     *
     * @return string
     */
    protected function convertClassName($className)
    {
        return str_replace('\\', '_', strtolower($className));
    }
}