<?php

require_once __DIR__ . '/../vendor/autoload.php';

use Dotenv\Dotenv;
use App\Config\Router;
use App\Middleware\Cors;
use App\Middleware\SecurityHeaders;
use App\Controllers\AuthController;
use App\Controllers\UserController;
use App\Controllers\BenneController;
use App\Controllers\FornecedorController;
use App\Controllers\InsumoController;
use App\Controllers\ProdutoController;
use App\Controllers\PedidosController;
use App\Controllers\FinanceiroController;
use App\Controllers\PermissaoController;
use App\Controllers\NotificacoesController;
use App\Controllers\CFOController;
use App\Controllers\CatalogoController;
use App\Controllers\ConselhoController;
use App\Controllers\AjusteController;
use App\Controllers\RelatoriosController;
use App\Controllers\TelegramController;
use App\Controllers\NFeController;
use App\Controllers\NFeAvulsaController;
use App\Controllers\PropostasController;
use App\Controllers\ConfigFinanceiroController;
use App\Controllers\DashboardController;
use App\Controllers\NcmRegraController;
use App\Controllers\EstoqueController;
use App\Controllers\CrmController;
use App\Controllers\AnaliseController;
use App\Controllers\AnaliseLucroController;

// Load environment variables
$dotenv = Dotenv::createImmutable(__DIR__ . '/..');
$dotenv->load();

// Handle CORS
// Em produção o nginx gerencia CORS. PHP só adiciona headers para localhost:9000 (dev local).
if (php_sapi_name() !== 'cli') {
    $origin = $_SERVER['HTTP_ORIGIN'] ?? '';
    $uri    = $_SERVER['REQUEST_URI'] ?? '';

    if (strpos($uri, '/catalogo/') !== false) {
        // Endpoint público do catálogo — aberto para qualquer origem
        header("Access-Control-Allow-Origin: *");
        header("Access-Control-Allow-Methods: GET, OPTIONS");
        header("Access-Control-Allow-Headers: Content-Type");
        if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
            http_response_code(200);
            exit();
        }
    } elseif ($origin === 'http://localhost:9000') {
        header("Access-Control-Allow-Origin: http://localhost:9000");
        header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
        header("Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With");
        header("Access-Control-Allow-Credentials: true");
        header("Access-Control-Max-Age: 3600");
        if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
            http_response_code(200);
            exit();
        }
    }
}

// Security headers
SecurityHeaders::apply();

// Rotas de proposta retornam HTML — não forçar Content-Type aqui para elas
$uri = $_SERVER['REQUEST_URI'] ?? '';
if (!preg_match('#^/proposta/#', parse_url($uri, PHP_URL_PATH) ?? '')) {
    header('Content-Type: application/json');
}

// Create router
$router = new Router();

// Health check route
$router->get('/', function () {
    echo json_encode([
        'status' => 'ok',
        'message' => 'API is running',
        'version' => '1.0.0'
    ]);
});

// Auth routes
$router->post('/auth/login', [AuthController::class, 'login']);
$router->post('/auth/register', [AuthController::class, 'register']);
$router->get('/auth/me', [AuthController::class, 'me']);

// User management routes (admin only)
$router->get('/users', [UserController::class, 'index']);
$router->post('/users', [UserController::class, 'store']);
$router->put('/users/{id}', [UserController::class, 'update']);
$router->delete('/users/{id}', [UserController::class, 'destroy']);
$router->get('/users/{id}/permissoes', [PermissaoController::class, 'get']);
$router->put('/users/{id}/permissoes', [PermissaoController::class, 'update']);

// Fornecedores routes
$router->get('/fornecedores', [FornecedorController::class, 'index']);
$router->get('/fornecedores/{id}', [FornecedorController::class, 'show']);
$router->post('/fornecedores', [FornecedorController::class, 'store']);
$router->put('/fornecedores/{id}', [FornecedorController::class, 'update']);
$router->delete('/fornecedores/{id}', [FornecedorController::class, 'destroy']);

// Insumos routes
$router->get('/insumos/tipos', [InsumoController::class, 'tipos']);
$router->get('/insumos', [InsumoController::class, 'index']);
$router->get('/insumos/{id}', [InsumoController::class, 'show']);
$router->post('/insumos', [InsumoController::class, 'store']);
$router->put('/insumos/{id}', [InsumoController::class, 'update']);
$router->delete('/insumos/{id}', [InsumoController::class, 'destroy']);

// Catálogo público — sem autenticação, retorna apenas nome + preco_venda
$router->get('/catalogo/precos', [CatalogoController::class, 'precos']);

// Produtos routes
$router->get('/produtos', [ProdutoController::class, 'index']);
$router->post('/produtos/upload-imagem', [ProdutoController::class, 'uploadImagem']);
$router->get('/produtos/{id}', [ProdutoController::class, 'show']);
$router->get('/produtos/{id}/calculate', [ProdutoController::class, 'calculate']);
$router->post('/produtos', [ProdutoController::class, 'store']);
$router->put('/produtos/{id}', [ProdutoController::class, 'update']);
$router->delete('/produtos/{id}', [ProdutoController::class, 'destroy']);
$router->put('/produtos/{id}/restaurar', [ProdutoController::class, 'restaurar']);

// Regras de sugestão automática de NCM
$router->get('/ncm-regras', [NcmRegraController::class, 'index']);
$router->get('/ncm-regras/sugestao', [NcmRegraController::class, 'sugestao']);
$router->post('/ncm-regras', [NcmRegraController::class, 'store']);
$router->put('/ncm-regras/{id}', [NcmRegraController::class, 'update']);
$router->delete('/ncm-regras/{id}', [NcmRegraController::class, 'destroy']);
$router->get('/produtos-revisar-ncm', [NcmRegraController::class, 'revisarProdutos']);
$router->post('/produtos-aplicar-ncm', [NcmRegraController::class, 'aplicarNcm']);

// Benne — módulo de orçamentos para clientes
$router->get('/benne/produtos',          [BenneController::class, 'produtos']);
$router->get('/benne/insumos',           [BenneController::class, 'insumos']);
$router->get('/benne/fornecedores',      [BenneController::class, 'fornecedores']);
$router->get('/benne/clientes',          [BenneController::class, 'clientes']);
$router->get('/benne/clientes/{id}',     [BenneController::class, 'clientesShow']);
$router->post('/benne/clientes',         [BenneController::class, 'clientesSave']);
$router->delete('/benne/clientes/{id}',  [BenneController::class, 'clientesDelete']);
$router->put('/benne/clientes/{id}/restaurar', [BenneController::class, 'clientesRestaurar']);
$router->get('/benne/orcamentos',                    [BenneController::class, 'orcamentosLista']);
$router->get('/benne/orcamentos/proximo-numero',     [BenneController::class, 'proximoNumero']);
$router->get('/benne/orcamentos/{id}',               [BenneController::class, 'orcamentoDetalhe']);
$router->post('/benne/orcamentos',       [BenneController::class, 'orcamentosSave']);
$router->delete('/benne/orcamentos/{id}',[BenneController::class, 'orcamentosDelete']);

// ── Módulo de Pedidos e Ordens de Produção ──────────────────────────────────
// Status do orçamento (atualizado aqui pois depende do PedidosController)
$router->put('/benne/orcamentos/{id}/status',        [PedidosController::class, 'orcamentoStatus']);

// Ordens de produção — listagem global (módulo Produção)
$router->get('/benne/ordens',                         [PedidosController::class, 'ordensLista']);
$router->get('/benne/dashboard',                      [DashboardController::class, 'index']);
$router->get('/benne/relatorio',                      [PedidosController::class, 'ordensRelatorio']);
$router->get('/benne/relatorio-etapas',               [PedidosController::class, 'etapasRelatorio']);
$router->get('/benne/entregas-programadas',           [PedidosController::class, 'entregasProgramadas']);

// Pedidos — CRUD
$router->get('/benne/pedidos',                        [PedidosController::class, 'lista']);
$router->get('/benne/pedidos/etapas',                 [PedidosController::class, 'listarEtapas']);
$router->get('/benne/pedidos/comandas',               [PedidosController::class, 'comandas']); // antes de {id} para evitar colisão
$router->get('/benne/pedidos/{id}',                   [PedidosController::class, 'detalhe']);
$router->post('/benne/pedidos',                       [PedidosController::class, 'criar']);
$router->put('/benne/pedidos/{id}',                   [PedidosController::class, 'atualizar']);
$router->put('/benne/pedidos/{id}/arquivar',
                                                                                                                       [PedidosController::class,
                                                                                                                       'arquivarPedido']);
$router->put('/benne/pedidos/{id}/sem-faturamento',
                                                                                                                       [PedidosController::class,
                                                                                                                       'semFaturamento']);
$router->delete('/benne/pedidos/{id}',                [PedidosController::class, 'deletar']);

// Contas a receber
$router->put('/benne/pedidos/contas/{id}',            [PedidosController::class, 'contaAtualizar']);

// Ordens de produção
$router->put('/benne/pedidos/ordens/{id}/etapa',                    [PedidosController::class, 'ordemEtapa']);
$router->put('/benne/pedidos/ordens/{id}/etapas/{etapa}/prestador',  [PedidosController::class, 'ordemEtapaPrestador']);
$router->put('/benne/pedidos/ordens/{id}/etapas/{etapa}/prestadores', [PedidosController::class, 'ordemEtapaPrestadores']);
$router->put('/benne/pedidos/ordens/{id}/status',                   [PedidosController::class, 'ordemStatus']);
$router->put('/benne/pedidos/ordens/{id}/bordado',                  [PedidosController::class, 'ordemBordado']);
$router->put('/benne/pedidos/ordens/{id}/obs',                      [PedidosController::class, 'ordemObs']);
$router->put('/benne/pedidos/ordens/{id}/arquivar',                 [PedidosController::class, 'arquivarOrdem']);
$router->put('/benne/pedidos/ordens/{id}/refazer',                  [PedidosController::class, 'refazerOrdem']);

// Edição rápida de data de conclusão no Romaneio
$router->put('/benne/pedidos/etapas/{etapaId}/data-conclusao',           [PedidosController::class, 'etapaDataConclusao']);
$router->put('/benne/pedidos/etapa-prestadores/{splitId}/data-conclusao', [PedidosController::class, 'etapaPrestadorDataConclusao']);
$router->put('/benne/pedidos/etapas/{etapaId}/valor',                    [PedidosController::class, 'etapaValor']);
$router->put('/benne/pedidos/etapa-prestadores/{splitId}/valor',         [PedidosController::class, 'etapaPrestadorValor']);

// (comandas registrado antes de {id} para evitar colisão de rota — ver acima)

// NF-e — emissão e consulta (antes de /compras para evitar colisão de rota)
$router->get('/benne/pedidos/{id}/nfe/danfe',         [NFeController::class, 'danfe']);
$router->get('/benne/pedidos/{id}/nfe',               [NFeController::class, 'status']);
$router->post('/benne/pedidos/{id}/nfe',              [NFeController::class, 'emitir']);

// Alterar forma de pagamento do pedido (opções do orçamento)
$router->get('/benne/pedidos/{id}/pagamento-opcoes',  [PedidosController::class, 'pagamentoOpcoes']);
$router->put('/benne/pedidos/{id}/pagamento',         [PedidosController::class, 'alterarPagamento']);

// NF-e avulsa (sem pedido) — devolução de compra, remessa para industrialização
$router->get('/benne/nfe-avulsa',                     [NFeAvulsaController::class, 'listar']);
$router->get('/benne/nfe-avulsa/{id}/danfe',          [NFeAvulsaController::class, 'danfe']);
$router->get('/benne/nfe-avulsa/{id}',                [NFeAvulsaController::class, 'status']);
$router->post('/benne/nfe-avulsa',                    [NFeAvulsaController::class, 'emitir']);
$router->post('/benne/nfe-avulsa/{id}/cancelar',      [NFeAvulsaController::class, 'cancelar']);

// Lista de compras
$router->get('/benne/pedidos/{id}/compras',           [PedidosController::class, 'listaCompras']);
$router->post('/benne/pedidos/{id}/compras/gerar',    [PedidosController::class, 'listaComprasGerar']);
$router->put('/benne/pedidos/compras/{id}',           [PedidosController::class, 'compraAtualizar']);

// ── Ordens de Ajuste ────────────────────────────────────────────────────────
$router->get('/benne/ajustes/proximo-numero',  [AjusteController::class, 'proximoNumero']);
$router->get('/benne/ajustes',                  [AjusteController::class, 'lista']);
$router->post('/benne/ajustes',                 [AjusteController::class, 'criar']);
$router->put('/benne/ajustes/{id}/etapa',       [AjusteController::class, 'avancarEtapa']);
$router->put('/benne/ajustes/{id}/etapas/{etapa}/prestador', [AjusteController::class, 'etapaPrestador']);
$router->put('/benne/ajustes/etapas/{etapaId}/valor', [AjusteController::class, 'etapaValor']);
$router->put('/benne/ajustes/etapas/{etapaId}/data-conclusao', [AjusteController::class, 'etapaDataConclusao']);
$router->put('/benne/ajustes/{id}/quantidade', [AjusteController::class, 'quantidade']);
$router->put('/benne/ajustes/{id}/conta',       [AjusteController::class, 'contaToggle']);
$router->put('/benne/ajustes/{id}',             [AjusteController::class, 'atualizar']);
$router->delete('/benne/ajustes/{id}',          [AjusteController::class, 'deletar']);

// ── Notificações internas ────────────────────────────────────────────────────
$router->get('/benne/notificacoes/count',             [NotificacoesController::class, 'count']);
$router->get('/benne/notificacoes',                   [NotificacoesController::class, 'lista']);
$router->put('/benne/notificacoes/{id}/lida',         [NotificacoesController::class, 'marcarLida']);
$router->put('/benne/notificacoes/{id}/arquivar',     [NotificacoesController::class, 'arquivar']);

// ── Módulo Financeiro (CFO) ──────────────────────────────────────────────────
$router->get('/benne/financeiro/resumo',                [FinanceiroController::class, 'resumo']);
$router->get('/benne/financeiro/saldo',                 [FinanceiroController::class, 'saldoGet']);
$router->put('/benne/financeiro/saldo',                 [FinanceiroController::class, 'saldoAtualizar']);
$router->get('/benne/financeiro/fluxo-caixa',           [FinanceiroController::class, 'fluxoCaixa']);
$router->get('/benne/financeiro/contas-pagar',          [FinanceiroController::class, 'contasPagarLista']);
$router->post('/benne/financeiro/contas-pagar',         [FinanceiroController::class, 'contasPagarCriar']);
$router->get('/benne/financeiro/contas-pagar/previsao-adicional', [FinanceiroController::class, 'previsaoAdicional']);
$router->post('/benne/financeiro/contas-pagar/gerar-previsoes',   [FinanceiroController::class, 'gerarPrevisoesRecorrentesHttp']);
$router->put('/benne/financeiro/contas-pagar/{id}',     [FinanceiroController::class, 'contasPagarAtualizar']);
$router->delete('/benne/financeiro/contas-pagar/{id}',  [FinanceiroController::class, 'contasPagarDeletar']);

// ── Assistente CFO Bea ──────────────────────────────────────────────────────
$router->get('/benne/cfo/sessions',                    [CFOController::class, 'sessionsList']);
$router->post('/benne/cfo/sessions/refresh-titles',    [CFOController::class, 'sessionsRefreshTitles']);
$router->post('/benne/cfo/sessions',                   [CFOController::class, 'sessionsCreate']);
$router->get('/benne/cfo/sessions/{id}',         [CFOController::class, 'sessionsGet']);
$router->post('/benne/cfo/sessions/{id}/save',   [CFOController::class, 'sessionsSave']);
$router->delete('/benne/cfo/sessions/{id}',      [CFOController::class, 'sessionsDelete']);
$router->post('/benne/cfo/chat',                 [CFOController::class, 'chat']);
$router->get('/benne/cfo/job/{id}',              [CFOController::class, 'jobStatus']);
$router->post('/benne/cfo/transcribe',           [CFOController::class, 'transcribe']);

// ── Conselho Benne — 6 personas simultâneas ─────────────────────────────────
$router->post('/benne/conselho/consultar',          [ConselhoController::class, 'consultar']);
$router->get('/benne/conselho/historico',            [ConselhoController::class, 'historicoLista']);
$router->get('/benne/conselho/historico/{id}',       [ConselhoController::class, 'historicoDetalhe']);
$router->get('/benne/conselho/memoria',              [ConselhoController::class, 'memoriaLista']);
$router->post('/benne/conselho/memoria',             [ConselhoController::class, 'memoriasSalvar']);
$router->delete('/benne/conselho/memoria/{id}',      [ConselhoController::class, 'memoriasDeletar']);

// ── Telegram — Nora Bot ──────────────────────────────────────────────────────
$router->post('/telegram/webhook', [TelegramController::class, 'webhook']);

// ── Propostas — públicas (sem auth) + API protegida ──────────────────────────
$router->get('/proposta/{slug}',          [PropostasController::class, 'servir']);
$router->post('/proposta/{slug}/track',   [PropostasController::class, 'track']);
$router->get('/benne/propostas',          [PropostasController::class, 'lista']);
$router->get('/benne/propostas/{slug}/logs', [PropostasController::class, 'logs']);
$router->post('/benne/propostas',         [PropostasController::class, 'criarEndpoint']);
$router->put('/benne/propostas/{slug}',    [PropostasController::class, 'atualizarEndpoint']);
$router->delete('/benne/propostas/{slug}', [PropostasController::class, 'deletarEndpoint']);

// ── Configurações Financeiras ────────────────────────────────
$router->get('/benne/config/fiscal',              [ConfigFinanceiroController::class, 'fiscalIndex']);
$router->get('/benne/config/fiscal/vigente',      [ConfigFinanceiroController::class, 'fiscalVigente']);
$router->post('/benne/config/fiscal',             [ConfigFinanceiroController::class, 'fiscalStore']);
$router->get('/benne/config/taxas',               [ConfigFinanceiroController::class, 'taxasIndex']);
$router->get('/benne/config/taxas/historico',     [ConfigFinanceiroController::class, 'taxasHistorico']);
$router->put('/benne/config/taxas/{modalidade}',  [ConfigFinanceiroController::class, 'taxaUpdate']);

// ── Contas a Receber ─────────────────────────────────────────
$router->get('/benne/contas-receber',                        [ConfigFinanceiroController::class, 'contasIndex']);
$router->put('/benne/contas-receber/{id}',                   [ConfigFinanceiroController::class, 'contaRegistrarPagamento']);
$router->get('/benne/contas-receber/{pedidoId}/pagamentos',  [ConfigFinanceiroController::class, 'pagamentosLista']);
$router->post('/benne/contas-receber/{pedidoId}/pagamentos', [ConfigFinanceiroController::class, 'pagamentoCriar']);
$router->put('/benne/contas-receber/pagamentos/{id}',        [ConfigFinanceiroController::class, 'pagamentoAtualizar']);
$router->delete('/benne/contas-receber/pagamentos/{id}',     [ConfigFinanceiroController::class, 'pagamentoDeletar']);
$router->put('/benne/contas-receber/parcela/{id}/previsao',  [ConfigFinanceiroController::class, 'parcelaAtualizarPrevisao']);
$router->put('/benne/contas-receber/parcela/{id}/desconto',  [ConfigFinanceiroController::class, 'parcelaDesconto']);

// ── Relatórios ───────────────────────────────────────────────────────────────
$router->get('/benne/relatorios/vendas',     [RelatoriosController::class, 'vendas']);
$router->get('/benne/relatorios/produtos',   [RelatoriosController::class, 'produtos']);
$router->get('/benne/relatorios/clientes',   [RelatoriosController::class, 'clientes']);
$router->get('/benne/relatorios/producao',   [RelatoriosController::class, 'producao']);
$router->get('/benne/relatorios/pagamentos', [RelatoriosController::class, 'pagamentos']);
$router->get('/benne/relatorios/acerto-pedidos', [RelatoriosController::class, 'acertoPedidos']);
$router->get('/benne/relatorios/acerto-marcia', [RelatoriosController::class, 'acertoMarcia']);
$router->put('/benne/relatorios/acerto-pedidos/{id}/marcar', [RelatoriosController::class, 'marcarAcertoSocia']);
$router->get('/benne/relatorios/acerto-pedidos/repasse-preview', [RelatoriosController::class, 'previewRepasse']);
$router->post('/benne/relatorios/acerto-pedidos/repasse', [RelatoriosController::class, 'registrarRepasse']);
$router->put('/benne/relatorios/pedido/{id}/repasse-pct', [RelatoriosController::class, 'definirRepassePct']);
$router->put('/benne/relatorios/pedido/{id}/repasse-legado', [RelatoriosController::class, 'definirRepasseLegado']);
$router->get('/benne/relatorios/vendas-grafico', [RelatoriosController::class, 'vendasGrafico']);
$router->get('/benne/relatorios/contas-pagar-grafico', [RelatoriosController::class, 'contasPagarGrafico']);
$router->get('/benne/relatorios/metas-vendas', [RelatoriosController::class, 'metasVendas']);

// ── Análise automática (somente leitura, token próprio via ANALISE_TOKEN) ────
$router->get('/benne/analise/resumo', [AnaliseController::class, 'resumo']);
$router->get('/benne/analise/lucro',  [AnaliseLucroController::class, 'lucro']);

// ── Estoque ───────────────────────────────────────────────────────────────────
// CRM
$router->get('/benne/crm/pipelines',                         [CrmController::class, 'pipelines']);
$router->get('/benne/crm/clientes',                          [CrmController::class, 'clientes']);
$router->get('/benne/crm/usuarios',                          [CrmController::class, 'usuarios']);
$router->get('/benne/crm/leads',                             [CrmController::class, 'leads']);
$router->post('/benne/crm/leads',                            [CrmController::class, 'storeLead']);
$router->get('/benne/crm/leads/{id}',                        [CrmController::class, 'showLead']);
$router->put('/benne/crm/leads/{id}',                        [CrmController::class, 'updateLead']);
$router->delete('/benne/crm/leads/{id}',                     [CrmController::class, 'deleteLead']);
$router->put('/benne/crm/leads/{id}/mover',                  [CrmController::class, 'moverLead']);
$router->post('/benne/crm/leads/{id}/converter-producao',    [CrmController::class, 'converterProducao']);
$router->get('/benne/crm/leads/{id}/atividades',             [CrmController::class, 'atividades']);
$router->post('/benne/crm/leads/{id}/atividades',            [CrmController::class, 'storeAtividade']);
$router->get('/benne/crm/leads/{id}/tarefas',                [CrmController::class, 'tarefas']);
$router->post('/benne/crm/leads/{id}/tarefas',               [CrmController::class, 'storeTarefa']);
$router->put('/benne/crm/leads/{id}/proposta',               [CrmController::class, 'vincularProposta']);
$router->put('/benne/crm/atividades/{id}',                   [CrmController::class, 'updateAtividade']);
$router->delete('/benne/crm/atividades/{id}',                [CrmController::class, 'deleteAtividade']);
$router->post('/benne/crm/atividades/{id}/resumo',           [CrmController::class, 'resumoAtividade']);
$router->put('/benne/crm/tarefas/{id}',                      [CrmController::class, 'updateTarefa']);
$router->delete('/benne/crm/tarefas/{id}',                   [CrmController::class, 'deleteTarefa']);
$router->post('/benne/crm/transcrever',                      [CrmController::class, 'transcrever']);
$router->get('/benne/crm/servicos',                          [CrmController::class, 'servicos']);
$router->post('/benne/crm/servicos',                         [CrmController::class, 'storeServico']);
$router->get('/benne/crm/servicos/indicadores',              [CrmController::class, 'indicadoresFinanceiros']);
$router->get('/benne/crm/servicos/{id}/recebiveis',          [CrmController::class, 'recebiveis']);
$router->post('/benne/crm/servicos/{id}/recebiveis',         [CrmController::class, 'storeRecebivel']);
$router->post('/benne/crm/servicos/{id}/gerar-recebiveis',   [CrmController::class, 'gerarRecebiveis']);
$router->put('/benne/crm/servicos/{id}',                     [CrmController::class, 'updateServico']);
$router->delete('/benne/crm/servicos/{id}',                  [CrmController::class, 'deleteServico']);
$router->put('/benne/crm/recebiveis/{id}',                   [CrmController::class, 'updateRecebivel']);
$router->delete('/benne/crm/recebiveis/{id}',                [CrmController::class, 'deleteRecebivel']);
$router->put('/benne/crm/projetos/{id}',                     [CrmController::class, 'updateProjeto']);
$router->post('/benne/crm/projetos/{id}/arquivos',           [CrmController::class, 'uploadProjetoArquivo']);
$router->delete('/benne/crm/projeto-arquivos/{id}',          [CrmController::class, 'deleteProjetoArquivo']);
$router->get('/benne/crm/recompra/sugestoes',                [CrmController::class, 'recompraSugestoes']);
$router->post('/benne/crm/recompra/gerar-sugestoes',         [CrmController::class, 'gerarSugestoesRecompra']);
$router->post('/benne/crm/recompra/desfazer-sugestoes',     [CrmController::class, 'desfazerSugestoesRecompra']);
$router->get('/benne/crm/recompra/clientes/{id}/mix',        [CrmController::class, 'recompraMix']);
$router->get('/benne/crm/indicadores',                       [CrmController::class, 'indicadores']);

$router->get('/benne/estoque/saldo',        [EstoqueController::class, 'saldo']);
$router->get('/benne/estoque/disponivel',   [EstoqueController::class, 'disponivel']);
$router->get('/benne/estoque/lotes',        [EstoqueController::class, 'lotesLista']);
$router->post('/benne/estoque/lotes',       [EstoqueController::class, 'lotesCriar']);
$router->put('/benne/estoque/lotes/{id}',   [EstoqueController::class, 'lotesAtualizar']);
$router->delete('/benne/estoque/lotes/{id}', [EstoqueController::class, 'lotesDeletar']);
$router->post('/benne/estoque/consumos',    [EstoqueController::class, 'consumosCriar']);

// ── Utilitários de deploy ──────────────────────────────────────────────────────
if (str_contains($_SERVER['REQUEST_URI'] ?? '', '/opcache-reset')) {
    header('Content-Type: application/json; charset=utf-8');
    if (function_exists('opcache_reset')) {
        $ok = opcache_reset();
        echo json_encode(['ok' => $ok, 'mensagem' => $ok ? 'opcache limpo' : 'falha']);
    } else {
        echo json_encode(['ok' => false, 'mensagem' => 'opcache não disponível']);
    }
    exit;
}

// Resolve the request
try {
    $router->resolve();
} catch (\Throwable $e) {
    error_log('[benneapp] Uncaught exception: ' . $e->getMessage() . ' in ' . $e->getFile() . ':' . $e->getLine());
    http_response_code(500);
    echo json_encode(['error' => 'Internal server error']);
}
