<?php
namespace Modules\Produtos;

use Gestoreasy\Core\Module\ModuleInterface;
use Gestoreasy\Core\Routing\Router;
use Gestoreasy\Core\Http\Request;
use Gestoreasy\Core\Http\Response;
use Gestoreasy\Core\Tenant\ConnectionManager;
use Gestoreasy\Core\Auth\AuthMiddleware;
use Gestoreasy\Core\Auth\Rbac;
use Gestoreasy\Core\Validation\Br;
use Gestoreasy\Core\Audit\AuditLogger;
use Modules\Produtos\Controllers\ProductsController;

class Module implements ModuleInterface {
    public function register(Router $router): void {
        $ctrl = new ProductsController();
        // Views (HTML)
        $router->get('/produtos', [$ctrl, 'viewIndex'], [AuthMiddleware::requireAuthHtml(), Rbac::requirePermissions(['produtos.read'])]);
        $router->get('/produtos/create', [$ctrl, 'viewCreate'], [AuthMiddleware::requireAuthHtml(), Rbac::requirePermissions(['produtos.create'])]);
        $router->get('/produtos/{id}', [$ctrl, 'viewShow'], [AuthMiddleware::requireAuthHtml(), Rbac::requirePermissions(['produtos.read'])]);
        $router->get('/produtos/{id}/edit', [$ctrl, 'viewEdit'], [AuthMiddleware::requireAuthHtml(), Rbac::requirePermissions(['produtos.update'])]);
        // Seed de exemplos (HTML e API)
        $router->get('/api/produtos/seed-exemplos', [$ctrl, 'seedExamples'], [AuthMiddleware::requireAuth(), Rbac::requirePermissions(['produtos.create'])]);
        // Listar produtos
        $router->get('/api/produtos', [$ctrl, 'list'], [AuthMiddleware::requireAuth(), Rbac::requirePermissions(['produtos.read'])]);
        // Obter produto por ID
        $router->get('/api/produtos/{id}', [$ctrl, 'getById'], [AuthMiddleware::requireAuth(), Rbac::requirePermissions(['produtos.read'])]);
        // Checar unicidade do código
        $router->get('/api/produtos/check-codigo', [$ctrl, 'checkCodigo'], [AuthMiddleware::requireAuth(), Rbac::requirePermissions(['produtos.read'])]);
        // Criar produto
        $router->post('/api/produtos', [$ctrl, 'create'], [AuthMiddleware::requireAuth(), Rbac::requirePermissions(['produtos.create'])]);
        // Atualizar produto
        $router->put('/api/produtos/{id}', [$ctrl, 'update'], [AuthMiddleware::requireAuth(), Rbac::requirePermissions(['produtos.update'])]);
        // PATCH parcial
        $router->patch('/api/produtos/{id}', [$ctrl, 'patch'], [AuthMiddleware::requireAuth(), Rbac::requirePermissions(['produtos.update'])]);
        // Remover produto
        $router->delete('/api/produtos/{id}', [$ctrl, 'delete'], [AuthMiddleware::requireAuth(), Rbac::requirePermissions(['produtos.delete'])]);
        // Metadados e mídias
        $router->get('/api/produtos/{id}/meta', [$ctrl, 'getMeta'], [AuthMiddleware::requireAuth(), Rbac::requirePermissions(['produtos.read'])]);
        $router->post('/api/produtos/{id}/meta', [$ctrl, 'saveMeta'], [AuthMiddleware::requireAuth(), Rbac::requirePermissions(['produtos.update'])]);
        $router->post('/api/produtos/{id}/media', [$ctrl, 'uploadMedia'], [AuthMiddleware::requireAuth(), Rbac::requirePermissions(['produtos.update'])]);
        $router->post('/api/produtos/{id}/media/primary', [$ctrl, 'setPrimaryMedia'], [AuthMiddleware::requireAuth(), Rbac::requirePermissions(['produtos.update'])]);
        // Listar mídias
        $router->get('/api/produtos/{id}/media', [$ctrl, 'listMedia'], [AuthMiddleware::requireAuth(), Rbac::requirePermissions(['produtos.read'])]);
    }
    public function name(): string { return 'Produtos'; }
    public function version(): string { return '0.1.0'; }
    public function dependencies(): array { return []; }
}