<?php

namespace App\Core\Product;

class ProductManager
{
    protected $modules = [];

    /**
     * Yeni bir ürün modülü kaydeder
     *
     * @param  string  $name  Ürün modülünün adı
     * @param  ProductInterface  $module  Ürün modül nesnesi
     * @return void
     */
    public function register($name, ProductInterface $module)
    {
        $this->modules[$name] = $module;
    }

    /**
     * Adı verilen ürün modülünü döndürür
     *
     * @param  string  $name  Ürün modülünün adı
     * @return ProductInterface
     *
     * @throws \Exception Modül bulunamazsa
     */
    public function get($name)
    {
        if (! isset($this->modules[$name])) {
            throw new \Exception("Ürün modülü bulunamadı: $name");
        }

        return $this->modules[$name];
    }

    /**
     * Tüm kayıtlı ürün modüllerini döndürür
     *
     * @return array<string, ProductInterface>
     */
    public function getAll()
    {
        return $this->modules;
    }

    /**
     * Bir ürün modülünün kayıtlı olup olmadığını kontrol eder
     *
     * @param  string  $name  Ürün modülünün adı
     * @return bool
     */
    public function has($name)
    {
        return isset($this->modules[$name]);
    }
}
