<?php

namespace Gaco\SnapBi\Contracts;

interface ConfigInterface
{
    /**
     * Create instance using singleton pattern
     */
    static function call(): self;

    /**
     * Register config
     *
     * @param array $configs
     * @return void
     */
    public function register(array $configs = []): void;

    /**
     * Get all config
     *
     * @return array
     */
    public static function all(): array;

    /**
     * Get single config value
     *
     * @param string $name
     * @param mixed $default
     * @return mixed
     */
    public static function get(string $name, mixed $default = null): mixed;
}
