<?php
namespace WorkbloomERP\Database;

use WorkbloomERP\Services\DBService;

class DBFactory {
    /**
     * Método para criação simplificada de instâncias do serviço de banco de dados.
     *
     * Este método implementa o padrão de projeto Factory, permitindo que o desenvolvedor obtenha 
     * uma instância pronta do **DBService** sem a necessidade de gerenciar manualmente o operador `new`. 
     * Sua principal vantagem é a flexibilidade para alternar entre diferentes conexões e esquemas 
     * (schemas) de banco de dados através de parâmetros opcionais, facilitando a operação em 
     * ambientes multi-banco ou arquiteturas multi-tenant.
     *
     * 
     *
     * ---
     * ## Funcionalidades Principais
     * 1. **Abstração de Instanciação:** Centraliza a criação do objeto, permitindo futuras implementações de Singletons ou Service Locators sem quebrar o código cliente.
     * 2. **Configuração On-the-fly:** Permite definir a conexão (ex: 'mysql_prod', 'sqlite_test') e o schema de trabalho no momento da criação.
     * 3. **Fluidez:** Ideal para ser utilizado em chamadas encadeadas (ex: `DBService::make()->select(...)`), tornando o código mais legível e conciso.
     *
     * ---
     * ## Exemplos de Uso
     * - **Conexão Padrão:** `DBService::make();` (Utiliza as definições default da classe).
     * - **Esquema Específico:** `DBService::make('', 'vendas');` (Mantém a conexão padrão, mas aponta para o schema de vendas).
     * - **Conexão Externa:** `DBService::make('external_db', 'public');`
     *
     * @param string $connection Identificador da conexão configurada no sistema.
     * @param string $schema Nome do esquema de banco de dados a ser selecionado.
     * @return DBService Uma nova instância do serviço de banco de dados configurada.
     */
    public static function make(string $connection = 'DEFAULT', string $schema = 'shared'): DBService {
        return new DBService(connection: $connection, schema: $schema);
    }
}