<?php

use App\Http\Controllers\AcaoSocial\CentrosDeReferencia\CentrosDeReferenciaController;
use App\Http\Controllers\Accounts\AccountAddressController;
use App\Http\Controllers\Accounts\AccountController;
use App\Http\Controllers\Accounts\Adesoes\AdesoesController;
use App\Http\Controllers\Accounts\AuthenticationController;
use App\Http\Controllers\Accounts\Chamados\ChamadoPesquisaSatisfacaoController;
use App\Http\Controllers\Accounts\Chamados\ChamadosArquivosController;
use App\Http\Controllers\Accounts\Chamados\ChamadosController;
use App\Http\Controllers\Accounts\Chamados\ChamadosMensagensController;
use App\Http\Controllers\Accounts\ContasPublicasController;
use App\Http\Controllers\Accounts\GovBrController;
use App\Http\Controllers\Accounts\Cronogramas\CronogramasController;
use App\Http\Controllers\Accounts\LinhasDoTempo\LinhasDoTempoController;
use App\Http\Controllers\Accounts\NovaContaAngraController;
use App\Http\Controllers\Accounts\ProfilesAddressController;
use App\Http\Controllers\Accounts\ProfilesController;
use App\Http\Controllers\Accounts\RecuperacaoDeSenhaController;
use App\Http\Controllers\Admin\ThemeController;
use App\Http\Controllers\ArquivosParquesJardinsController;
use App\Http\Controllers\AtaController;
use App\Http\Controllers\CartaServicos\CartaServicosController;
use App\Http\Controllers\Comunicacao\BannersController;
use App\Http\Controllers\Comunicacao\BoletinsController;
use App\Http\Controllers\Comunicacao\NoticiasController;
use App\Http\Controllers\ConselhosMunicipais\ArquivosController;
use App\Http\Controllers\ConselhosMunicipais\ConselhosController;
use App\Http\Controllers\ContaAngra\ChamadosTiController;
use App\Http\Controllers\ContaAngra\ContaAngraController;
use App\Http\Controllers\ContratoController;
use App\Http\Controllers\CurriculoController;
use App\Http\Controllers\DefesaCivil\BoletimMeteorologicoController;
use App\Http\Controllers\EmpresasController;
use App\Http\Controllers\Escolas\EscolasCrechesController;
use App\Http\Controllers\GestorIdController;
use App\Http\Controllers\HtmlController;
use App\Http\Controllers\AtivosTi\AtivosTiController;
use App\Http\Controllers\AtivosTi\EquipamentosController;
use App\Http\Controllers\AtivosTi\LicencasController;
use App\Http\Controllers\HtmlMenuLinkController;
use App\Http\Controllers\Demandas\DemandaController;
use App\Http\Controllers\Demandas\DemandaRelatorioController;
use App\Http\Controllers\Demandas\DemandaTiController;
use App\Http\Controllers\Demandas\GerenciarAssuntosController as DemandaGerenciarAssuntosController;
use App\Http\Controllers\Demandas\GerenciarClientesController as DemandaGerenciarClientesController;
use App\Http\Controllers\IndicadoresTi\GerenciarAssuntosController;
use App\Http\Controllers\IndicadoresTi\GerenciarClientesController;
use App\Http\Controllers\IndicadoresTi\IndicadoresTiController;
use App\Http\Controllers\IndicadoresTi\IndicadoresTiRelatorioController;
use App\Http\Controllers\LegislacaoAutoresController;
use App\Http\Controllers\LegislacaoCadastrosController;
use App\Http\Controllers\LegislacaoCargosController;
use App\Http\Controllers\LegislacaoCategoriasController;
use App\Http\Controllers\LegislacaoController;
use App\Http\Controllers\LegislacaoPortariaController;
use App\Http\Controllers\LegislacaoPortariaRetificacaoController;
use App\Http\Controllers\LegislacaoRetificacaoController;
use App\Http\Controllers\LegislacaoTiposController;
use App\Http\Controllers\LicitacaoProcedimentoController;
use App\Http\Controllers\LinkController;
use App\Http\Controllers\Mobiangra\MobiangraController;
use App\Http\Controllers\OcorrenciasPcaController;
use App\Http\Controllers\Organizacao\UnidadeOrganizacionalController;
use App\Http\Controllers\Paginas\AdminController;
use App\Http\Controllers\ParquesJardinsController;
use App\Http\Controllers\ParqueTecnologico\AreasController;
use App\Http\Controllers\ParqueTecnologico\DecretosLeisController;
use App\Http\Controllers\ParqueTecnologico\EditaisController;
use App\Http\Controllers\ParqueTecnologico\FaqsController;
use App\Http\Controllers\ParqueTecnologico\ParqueTecnologicoController;
use App\Http\Controllers\ParqueTecnologico\StartupsController;
use App\Http\Controllers\PhoneController;
use App\Http\Controllers\PontoFocalController;
use App\Http\Controllers\Sei\SeiAlertaController;
use App\Http\Controllers\ProcessosController;
use App\Http\Controllers\ProjetosProgramas\ProjetosProgramasController;
use App\Http\Controllers\RepositorioController;
use App\Http\Controllers\ReusableMenusController;
use App\Http\Controllers\RHInformativoController;
// use App\Http\Controllers\Saude\PessoasTrans\PessoasTransController; // módulo pessoas trans desativado
use App\Http\Controllers\StrategicDashboardController;
use App\Http\Controllers\StructureController;
use App\Http\Controllers\TurisAngra\EmpresasDeTurismo\EmpresasTurismoController;
use App\Http\Controllers\TurisAngra\Guias\GuiasController;
use App\Http\Controllers\UnidadesDeSaudeController;
use App\Http\Controllers\UrlController;
use App\Http\Controllers\ValidacaoDocumentosController;
use Illuminate\Support\Facades\Route;

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth']], function () {
    Route::get('painel', [AdminController::class, 'dashboard'])->name('dashboard');
    Route::get('adesao/fibromialgia', [AdesoesController::class, 'fibromialgia'])->name('adesao.fibromialgia');
    Route::get('adesao/credenciamento/musicos', [AdesoesController::class, 'credenciamentoMusicos'])->name('adesao.credenciamentoMusicos');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'cronogramas']], function () {
    Route::prefix('cronogramas')->name('cronogramas.')->group(function () {
        Route::get('/', [CronogramasController::class, 'dashboard'])->name('dashboard');

        Route::get('/projetos/criar', [CronogramasController::class, 'createProject'])->name('projetos.create');
        Route::post('/projetos', [CronogramasController::class, 'storeProject'])->name('projetos.store');

        Route::get('/projetos/{project}', [CronogramasController::class, 'showProject'])->name('projetos.show');
        Route::get('/projetos/{project}/editar', [CronogramasController::class, 'editProject'])->name('projetos.edit');
        Route::put('/projetos/{project}', [CronogramasController::class, 'updateProject'])->name('projetos.update');
        Route::delete('/projetos/{project}', [CronogramasController::class, 'destroyProject'])->name('projetos.destroy');
        Route::delete('/projetos-arquivados', [CronogramasController::class, 'projectsBulkDestroy'])->name('projetos.arquivados.destroy');
        Route::post('/projetos/{project}/arquivar', [CronogramasController::class, 'archiveProject'])->name('projetos.arquivar');
        Route::post('/projetos/{project}/desarquivar', [CronogramasController::class, 'unarchiveProject'])->name('projetos.desarquivar');
        Route::post('/projetos/{project}/encerrar', [CronogramasController::class, 'closeProject'])->name('projetos.encerrar');

        Route::get('/projetos/{project}/exportar/pdf/{type?}', [CronogramasController::class, 'exportPdf'])->name('projetos.export.pdf');
        Route::get('/projetos/{project}/exportar/excel', [CronogramasController::class, 'exportExcel'])->name('projetos.export.excel');

        Route::get('/projetos/{project}/atividades/dados', [CronogramasController::class, 'activitiesData'])->name('atividades.data');
        Route::post('/projetos/{project}/atividades', [CronogramasController::class, 'activityStore'])->name('atividades.store');
        Route::get('/projetos/{project}/atividades/{activity}', [CronogramasController::class, 'activityDetails'])->name('atividades.show');
        Route::put('/projetos/{project}/atividades/{activity}', [CronogramasController::class, 'activityUpdate'])->name('atividades.update');
        Route::patch('/projetos/{project}/atividades/{activity}/inline', [CronogramasController::class, 'activityInline'])->name('atividades.inline');
        Route::post('/projetos/{project}/atividades/{activity}/duplicar', [CronogramasController::class, 'activityDuplicate'])->name('atividades.duplicate');
        Route::post('/projetos/{project}/atividades/{activity}/arquivar', [CronogramasController::class, 'activityArchive'])->name('atividades.arquivar');
        Route::post('/projetos/{project}/atividades/{activity}/restaurar', [CronogramasController::class, 'activityRestore'])->name('atividades.restaurar');
        Route::delete('/projetos/{project}/atividades/{activity}', [CronogramasController::class, 'activityDestroy'])->name('atividades.destroy');
        Route::delete('/projetos/{project}/atividades-arquivadas', [CronogramasController::class, 'activitiesBulkDestroy'])->name('atividades.arquivadas.destroy');
        Route::post('/projetos/{project}/atividades/reordenar', [CronogramasController::class, 'activityReorder'])->name('atividades.reorder');

        Route::post('/projetos/{project}/atividades/{activity}/comentarios', [CronogramasController::class, 'commentStore'])->name('comentarios.store');
        Route::delete('/projetos/{project}/atividades/{activity}/comentarios/{comment}', [CronogramasController::class, 'commentDestroy'])->name('comentarios.destroy');

        Route::post('/projetos/{project}/atividades/{activity}/anexos', [CronogramasController::class, 'attachmentStore'])->name('atividades.attachments');
        Route::get('/projetos/{project}/atividades/{activity}/anexos/{attachment}/baixar', [CronogramasController::class, 'attachmentDownload'])->name('atividades.attachments.download');
        Route::delete('/projetos/{project}/atividades/{activity}/anexos/{attachment}', [CronogramasController::class, 'attachmentDestroy'])->name('atividades.attachments.destroy');
    });
});

Route::group(['prefix' => 'conta-angra', 'as' => 'admin.', 'middleware' => ['auth']], function () {

    Route::get('/', [ContaAngraController::class, 'index'])->name('contaAngra.index');

    Route::get('perfil', [ProfilesController::class, 'perfil'])->name('profile');
    Route::post('perfil', [ProfilesController::class, 'perfilUpdate'])->name('profile.update');

    Route::get('senha', [ProfilesController::class, 'senha'])->name('password');
    Route::post('senha', [ProfilesController::class, 'senhaUpdate'])->name('password.update');

    Route::resource('enderecos', ProfilesAddressController::class)->names('perfilEnderecos');
    Route::post('enderecos/{endereco}/fixar', [ProfilesAddressController::class, 'fixar'])
        ->name('perfilEnderecos.fixar');
    Route::post('enderecos/{endereco}/status', [ProfilesAddressController::class, 'status'])
        ->name('perfilEnderecos.status');

    Route::get('foto', [ProfilesController::class, 'foto'])->name('photo');
    Route::post('foto', [ProfilesController::class, 'fotoUpdate'])->name('photo.update');

    Route::resource('chamados', ChamadosController::class)->names('contaAngra.chamados');

    Route::get('chamados/{chamado}/solicitacao', [ChamadosMensagensController::class, 'index'])
        ->name('contaAngra.chamados.solicitacao');
    Route::post('chamados/{chamado}/solicitacao', [ChamadosMensagensController::class, 'update'])
        ->name('contaAngra.chamados.solicitacaoUpdate');

    Route::get('chamados/{chamado}/pesquisa-satisfacao', [ChamadoPesquisaSatisfacaoController::class, 'show'])
        ->name('contaAngra.chamados.pesquisa-satisfacao.show');
    Route::post('chamados/{chamado}/pesquisa-satisfacao', [ChamadoPesquisaSatisfacaoController::class, 'store'])
        ->name('contaAngra.chamados.pesquisa-satisfacao.store');

    Route::get('chamados/{chamado}/arquivos/{mensagem}/update', [ChamadosArquivosController::class, 'index'])
        ->name('contaAngra.chamados.arquivos');
    Route::post('chamados/{chamado}/arquivos/{mensagem}/update', [ChamadosArquivosController::class, 'update'])
        ->name('contaAngra.chamados.arquivosUpdate');

    Route::post('chamados/{chamado}/nova/mensagem', [ChamadosController::class, 'novaMensagem'])
        ->name('contaAngra.chamados.novaMensagem');

    Route::get('chamados-ti', [ChamadosTiController::class, 'index'])->name('contaAngra.chamadosTi.index');
    Route::get('chamados-ti/abrir', [ChamadosTiController::class, 'create'])->name('contaAngra.chamadosTi.create');
    Route::post('chamados-ti', [ChamadosTiController::class, 'store'])->name('contaAngra.chamadosTi.store');
    Route::get('chamados-ti/{chamadoTi}', [ChamadosTiController::class, 'show'])->name('contaAngra.chamadosTi.show');
    Route::post('chamados-ti/{chamadoTi}/interagir', [ChamadosTiController::class, 'interagir'])->name('contaAngra.chamadosTi.interagir');
    Route::get('chamados-ti/{chamadoTi}/anexos/{anexo}', [ChamadosTiController::class, 'servirAnexo'])->name('contaAngra.chamadosTi.anexo');

    Route::middleware(['linhasDoTempo'])->prefix('linhas-do-tempo')->name('contaAngra.linhasDoTempo.')->group(function () {
        Route::get('/', [LinhasDoTempoController::class, 'index'])->name('index');
        Route::get('/criar', [LinhasDoTempoController::class, 'create'])->name('create');
        Route::post('/', [LinhasDoTempoController::class, 'store'])->name('store');

        Route::post('/rascunhos/criacao-linha', [LinhasDoTempoController::class, 'draftUpsertNewTimeline'])->name('draft.createTimeline');
        Route::get('/rascunhos/criacao-linha', [LinhasDoTempoController::class, 'draftShowNewTimeline'])->name('draft.createTimeline.show');
        Route::delete('/rascunhos/criacao-linha', [LinhasDoTempoController::class, 'draftDestroyNewTimeline'])->name('draft.createTimeline.destroy');

        Route::get('/{timeline}/exportar/pdf', [LinhasDoTempoController::class, 'exportPdf'])->name('export.pdf');
        Route::get('/{timeline}/exportar/excel', [LinhasDoTempoController::class, 'exportExcel'])->name('export.excel');

        Route::post('/{timeline}/rascunho', [LinhasDoTempoController::class, 'draftUpsert'])->name('draft.upsert');
        Route::get('/{timeline}/rascunho', [LinhasDoTempoController::class, 'draftShow'])->name('draft.show');
        Route::delete('/{timeline}/rascunho', [LinhasDoTempoController::class, 'draftDestroy'])->name('draft.destroy');

        Route::post('/{timeline}/anexos', [LinhasDoTempoController::class, 'attachmentStoreTimeline'])->name('attachments.timeline');
        Route::get('/{timeline}/anexos/{attachment}/baixar', [LinhasDoTempoController::class, 'attachmentDownload'])->name('attachments.download');

        Route::get('/{timeline}/editar', [LinhasDoTempoController::class, 'edit'])->name('edit');
        Route::put('/{timeline}', [LinhasDoTempoController::class, 'update'])->name('update');
        Route::delete('/{timeline}', [LinhasDoTempoController::class, 'destroy'])->name('destroy');
        Route::post('/{timeline}/arquivar', [LinhasDoTempoController::class, 'arquivar'])->name('arquivar');

        Route::post('/{timeline}/pontos/rascunho', [LinhasDoTempoController::class, 'draftUpsertNewPoint'])->name('pontos.draft.create');
        Route::get('/{timeline}/pontos/rascunho', [LinhasDoTempoController::class, 'draftShowNewPoint'])->name('pontos.draft.create.show');
        Route::delete('/{timeline}/pontos/rascunho', [LinhasDoTempoController::class, 'draftDestroyNewPoint'])->name('pontos.draft.create.destroy');

        Route::post('/{timeline}/pontos', [LinhasDoTempoController::class, 'pointStore'])->name('pontos.store');
        Route::put('/{timeline}/pontos/{historicalPoint}', [LinhasDoTempoController::class, 'pointUpdate'])->name('pontos.update');
        Route::delete('/{timeline}/pontos/{historicalPoint}', [LinhasDoTempoController::class, 'pointDestroy'])->name('pontos.destroy');
        Route::post('/{timeline}/pontos/{historicalPoint}/rascunho', [LinhasDoTempoController::class, 'draftUpsertPoint'])->name('pontos.draft.upsert');
        Route::get('/{timeline}/pontos/{historicalPoint}/rascunho', [LinhasDoTempoController::class, 'draftShowPoint'])->name('pontos.draft.show');
        Route::delete('/{timeline}/pontos/{historicalPoint}/rascunho', [LinhasDoTempoController::class, 'draftDestroyPoint'])->name('pontos.draft.destroy');
        Route::post('/{timeline}/pontos/{historicalPoint}/anexos', [LinhasDoTempoController::class, 'attachmentStorePoint'])->name('pontos.attachments');

        Route::post('/{timeline}/pontos/{historicalPoint}/notas', [LinhasDoTempoController::class, 'noteStore'])->name('notas.store');
        Route::put('/{timeline}/pontos/{historicalPoint}/notas/{note}', [LinhasDoTempoController::class, 'noteUpdate'])->name('notas.update');
        Route::delete('/{timeline}/pontos/{historicalPoint}/notas/{note}', [LinhasDoTempoController::class, 'noteDestroy'])->name('notas.destroy');

        Route::get('/{timeline}', [LinhasDoTempoController::class, 'show'])->name('show');
    });
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'usuarios']], function () {
    Route::resource('users', AccountController::class)->names('contas');
    Route::post('users/status/{user}', [AccountController::class, 'status'])->name('contas.status');

    Route::resource('users.enderecos', AccountAddressController::class)->names('contas.enderecos');
    Route::post('users/{user}/enderecos/{endereco}/status', [AccountAddressController::class, 'status'])->name('contas.enderecos.status');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'banners']], function () {
    Route::post('banners/status/{banner}', [BannersController::class, 'status'])->name('banners.status');
    Route::resource('banners', BannersController::class)->names('banners');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'guias']], function () {
    Route::match(['get', 'post'], 'guias/verify', [GuiasController::class, 'verify'])->name('guias.verify');
    Route::post('guias/status/{guia}', [GuiasController::class, 'status'])->name('guias.status');
    Route::resource('guias', GuiasController::class)->names('guias');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'boletins']], function () {
    Route::resource('boletins', BoletinsController::class)
        ->names('boletins')
        ->parameters(['boletins' => 'boletim']);
    Route::post('boletins/status/{boletim}', [BoletinsController::class, 'status'])->name('boletins.status');
    Route::post('boletins/indexacao/{boletim}', [BoletinsController::class, 'indexacao'])->name('boletins.indexacao');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'noticias']], function () {
    Route::resource('noticias', NoticiasController::class)->names('noticias')->except(['news', 'details']);
    Route::post('noticias/status/{noticia}', [NoticiasController::class, 'status'])->name('noticias.status');
    Route::post('noticias/fixar/{noticia}', [NoticiasController::class, 'fixar'])->name('noticias.fix');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'empresasDeTurismo']], function () {

    Route::get('empresas-de-turismo/{empresaTurismo}/enderecos/{endereco}/edit', [EmpresasTurismoController::class, 'endereco'])
        ->name('empresasDeTurismo.endereco');
    Route::post('empresas-de-turismo/{empresaTurismo}/enderecos/{endereco}/edit', [EmpresasTurismoController::class, 'enderecoUpdate'])
        ->name('empresasDeTurismo.enderecoUpdate');

    Route::get('empresas-de-turismo/{empresaTurismo}/proprietario/{user}/edit', [EmpresasTurismoController::class, 'proprietario'])
        ->name('empresasDeTurismo.proprietario');
    Route::post('empresas-de-turismo/{empresaTurismo}/proprietario/{user}/edit', [EmpresasTurismoController::class, 'proprietarioUpdate'])
        ->name('empresasDeTurismo.proprietarioUpdate');

    Route::get('empresas-de-turismo/{empresaTurismo}/preposto/edit', [EmpresasTurismoController::class, 'preposto'])
        ->name('empresasDeTurismo.preposto');
    Route::post('empresas-de-turismo/{empresaTurismo}/preposto/edit', [EmpresasTurismoController::class, 'prepostoUpdate'])
        ->name('empresasDeTurismo.prepostoUpdate');

    Route::get('empresas-de-turismo/{empresaTurismo}/clipboard/edit', [EmpresasTurismoController::class, 'clipboard'])
        ->name('empresasDeTurismo.clipboard');
    Route::post('empresas-de-turismo/{empresaTurismo}/clipboard/edit', [EmpresasTurismoController::class, 'clipboardUpdate'])
        ->name('empresasDeTurismo.clipboardUpdate');

    Route::post('empresas-de-turismo/{empresaTurismo}/preposto/{user}/remove', [EmpresasTurismoController::class, 'prepostoRemove'])
        ->name('empresasDeTurismo.prepostoRemove');

    Route::get('empresas-de-turismo/{empresaTurismo}/ficha-comprovacao/pdf', [EmpresasTurismoController::class, 'gerarFichaComprovacaoPdf'])
        ->name('empresasDeTurismo.fichaComprovacaoPdf');

    Route::match(['get', 'post'], 'empresas-de-turismo/verify', [EmpresasTurismoController::class, 'verify'])
        ->name('empresasDeTurismo.verify');
    Route::post('empresas-de-turismo/status/{empresaTurismo}', [EmpresasTurismoController::class, 'status'])
        ->name('empresasDeTurismo.status');
    Route::resource('empresas-de-turismo', EmpresasTurismoController::class)
        ->names('empresasDeTurismo')
        ->parameters([
            'empresas-de-turismo' => 'empresaTurismo',
        ]);

    Route::post('empresas-de-turismo/{empresaTurismo}/embarcacoes/{embarcacao}/status', [EmpresasTurismoController::class, 'embarcacoesStatus'])
        ->name('embarcacoes.status');
    Route::get('empresas-de-turismo/{empresaTurismo}/embarcacoes', [EmpresasTurismoController::class, 'embarcacoesIndex'])
        ->name('embarcacoes.index');
    Route::get('empresas-de-turismo/{empresaTurismo}/embarcacoes/create', [EmpresasTurismoController::class, 'embarcacoesCreate'])
        ->name('embarcacoes.create');
    Route::post('empresas-de-turismo/{empresaTurismo}/embarcacoes', [EmpresasTurismoController::class, 'embarcacoesStore'])
        ->name('embarcacoes.store');
    Route::get('empresas-de-turismo/{empresaTurismo}/embarcacoes/{embarcacao}/edit', [EmpresasTurismoController::class, 'embarcacoesEdit'])
        ->name('embarcacoes.edit');
    Route::put('empresas-de-turismo/{empresaTurismo}/embarcacoes/{embarcacao}', [EmpresasTurismoController::class, 'embarcacoesUpdate'])
        ->name('embarcacoes.update');
    Route::delete('empresas-de-turismo/{empresaTurismo}/embarcacoes/{embarcacao}', [EmpresasTurismoController::class, 'embarcacoesDestroy'])
        ->name('embarcacoes.destroy');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'empresas']], function () {
    Route::match(['get', 'post'], 'empresas/verify', [EmpresasController::class, 'verify'])->name('empresas.verify');
    Route::post('empresas/status/{empresa}', [EmpresasController::class, 'status'])->name('empresas.status');
    Route::resource('empresas', EmpresasController::class)->except(['show'])->names('empresas');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'centrosReferencia']], function () {
    Route::post('centros/status/{centro}', [CentrosDeReferenciaController::class, 'status'])->name('acaoSocial.centrosDeReferencia.status');
    Route::resource('centros', CentrosDeReferenciaController::class)->names('acaoSocial.centrosDeReferencia');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => 'auth'], function () {

    Route::get('reset-password', [AuthenticationController::class, 'resetPassword'])->name('resetPassword');
    Route::post('reset-password', [AuthenticationController::class, 'resetPasswordUpdate'])->name('resetPasswordUpdate');

    Route::post('unidades-de-saude/status/{unidade}', [UnidadesDeSaudeController::class, 'status'])->name('unidadesSaude.status');
    Route::resource('unidades-de-saude', UnidadesDeSaudeController::class)
        ->names('unidadesSaude')
        ->parameters([
            'unidades-de-saude' => 'unidade',
        ]);

    Route::post('informativos-recursos-humanos/status/{rHInformativo}', [RHInformativoController::class, 'status'])->name('informativos_recursos_humanos.status');
    Route::resource('informativos-recursos-humanos', RHInformativoController::class)
        ->names('informativos_recursos_humanos')
        ->parameters([
            'informativos-recursos-humanos' => 'rHInformativo',
        ]);

    Route::post('parques-e-jardins/status/{parque}', [ParquesJardinsController::class, 'status'])->name('parquesJardins.status');
    Route::resource('parques-e-jardins', ParquesJardinsController::class)->names('parquesJardins')
        ->parameters([
            'parques-e-jardins' => 'parque',
        ]);
    Route::post('parques-e-jardins/{parque}/status/{arquivo}', [ArquivosParquesJardinsController::class, 'status'])->name('parquesJardins.arquivos.status');
    Route::post('parques-e-jardins/{parque}/indexacao/{arquivo}', [ArquivosParquesJardinsController::class, 'indexacao'])->name('parquesJardins.arquivos.indexacao');
    Route::resource('parques-e-jardins.arquivos', ArquivosParquesJardinsController::class)
        ->names('parquesJardins.arquivos')
        ->parameters([
            'parques-e-jardins' => 'parque',
        ]);

    Route::post('conselhos/status/{conselho}', [ConselhosController::class, 'status'])->name('conselhosMunicipais.conselhos.status');
    Route::resource('conselhos', ConselhosController::class)->names('conselhosMunicipais.conselhos');
    Route::post('conselhos/{conselho}/status/{arquivo}', [ArquivosController::class, 'status'])->name('conselhosMunicipais.arquivos.status');
    Route::post('conselhos/{conselho}/indexacao/{arquivo}', [ArquivosController::class, 'indexacao'])->name('conselhosMunicipais.arquivos.indexacao');
    Route::resource('conselhos.arquivos', ArquivosController::class)->names('conselhosMunicipais.arquivos');

    Route::post('escolas/status/{escola}', [EscolasCrechesController::class, 'status'])->name('escolas.status');
    Route::resource('escolas', EscolasCrechesController::class)->names('escolas');

    Route::resource('urls', UrlController::class)->names('urls');
    Route::post('urls/{url}/toggle', [UrlController::class, 'toggle'])->name('urls.toggle');

    Route::resource('boletim-meteorologico', BoletimMeteorologicoController::class)->names('boletim-meteorologico');

    Route::get('curriculos', [CurriculoController::class, 'index'])->name('curriculos.index');
    Route::get('curriculos/acompanhamento/{id}', [CurriculoController::class, 'acompanhamentoCurriculo'])->name('curriculos.acompanhamentoCurriculo');
    Route::post('curriculos/acompanhamento/store', [CurriculoController::class, 'store'])->name('curriculos.acompanhamento.store');
    Route::put('curriculos/acompanhamento/update/{id}', [CurriculoController::class, 'update'])->name('curriculos.acompanhamento.update');
    Route::get('curriculos/gerarCurriculo/{id}', [CurriculoController::class, 'gerarCurriculo'])->name('curriculos.gerarCurriculo');
    Route::get('curriculos/gerarRelatorio', [CurriculoController::class, 'gerarRelatorio'])->name('curriculos.gerarRelatorio');
    Route::get('curriculos/listaCadastros', [CurriculoController::class, 'listaCadastros'])->name('curriculos.listaCadastros');
    Route::get('curriculos/edit/{tipo}/{id}', [CurriculoController::class, 'edit'])->name('curriculos.edit');
    Route::put('curriculos/updateCadastro/{tipo}/{id}', [CurriculoController::class, 'updateCadastro'])->name('curriculos.updateCadastro');
    Route::get('curriculos/logs', [CurriculoController::class, 'logs'])->name('curriculos.logs');

    Route::get('gerador-id', [GestorIdController::class, 'index'])->name('gerador-id.index');
    Route::get('gerador-id/create', [GestorIdController::class, 'create'])->name('gerador-id.create');
    Route::post('gerador-id/store', [GestorIdController::class, 'store'])->name('gerador-id.store');
    Route::put('/gerador-id/{id}', [GestorIdController::class, 'update'])->name('gerador-id.update');
    Route::patch('gerador-id/toggleStatus/{id}', [GestorIdController::class, 'toggleStatus'])->name('gerador-id.toggleStatus');
    Route::get('gerador-id/logs/usuarios', [GestorIdController::class, 'logsUsuario'])->name('gerador-id.logs.logsUsuario');

    Route::get('ocorrencias-pca', [OcorrenciasPcaController::class, 'index'])->name('ocorrencias-pca.index');
    Route::get('ocorrencias-pca/acompanhamento', [OcorrenciasPcaController::class, 'show'])->name('ocorrencias-pca.acompanhamento');
    Route::get('ocorrencias-pca/fichaUsuario/{id}', [OcorrenciasPcaController::class, 'fichaUsuario'])
        ->name('ocorrencias-pca.fichaUsuario');
    Route::get('ocorrencias-pca/pdf/{id}', [OcorrenciasPcaController::class, 'gerarFichaPDF'])
        ->name('ocorrencias-pca.gerarPdf');

    Route::resource('processos', ProcessosController::class)->names('processos');
    Route::post('processos/status/{processo}', [ProcessosController::class, 'status'])->name('processos.status');
    Route::match(['get', 'post'], 'processos/acompanhamento/{processo}', [ProcessosController::class, 'acompanhamento'])->name('processos.acompanhamento');

    Route::match(['post', 'patch'], 'htmls/preview', [HtmlController::class, 'preview'])->name('htmls.preview');
    Route::resource('htmls', HtmlController::class)->names('htmls');
    Route::post('htmls/visibility/{html}', [HtmlController::class, 'toggleVisibility'])->name('htmls.visibility');
    Route::post('htmls/status/{html}', [HtmlController::class, 'toggleStatus'])->name('htmls.status');
    Route::post('htmls/custom-menu/{html}', [HtmlController::class, 'toggleCustomMenu'])->name('htmls.customMenu');
    Route::match(['get', 'post'], 'htmls/{html}/menu', [HtmlMenuLinkController::class, 'index'])->name('htmls.menu.index');
    Route::match(['get', 'post'], 'htmls/{html}/menu/update/{id}', [HtmlMenuLinkController::class, 'update'])->name('htmls.menu.update');
    Route::match(['get', 'delete'], 'htmls/{html}/menu/destroy/{id}', [HtmlMenuLinkController::class, 'destroy'])->name('htmls.menu.destroy');

    // Gerenciador de Menus Reutilizáveis (Portal)
    Route::resource('menus-reutilizaveis', ReusableMenusController::class)
        ->names('menusReutilizaveis')
        ->parameters(['menus-reutilizaveis' => 'menu']);

    Route::post('menus-reutilizaveis/status/{menu}', [ReusableMenusController::class, 'toggleStatus'])
        ->name('menusReutilizaveis.status');

    Route::post('menus-reutilizaveis/{menu}/links', [ReusableMenusController::class, 'storeLink'])
        ->name('menusReutilizaveis.links.store');
    Route::post('menus-reutilizaveis/{menu}/links/update/{link}', [ReusableMenusController::class, 'updateLink'])
        ->name('menusReutilizaveis.links.update');
    Route::delete('menus-reutilizaveis/{menu}/links/destroy/{link}', [ReusableMenusController::class, 'destroyLink'])
        ->name('menusReutilizaveis.links.destroy');

    Route::post('repositorio/status/{repositorio}', [RepositorioController::class, 'status'])->name('repositorio.status');
    Route::resource('repositorio', RepositorioController::class)->names('repositorio');

    Route::post('secretarias/status/{structure}', [StructureController::class, 'status'])->name('secretarias.status');
    Route::resource('secretarias', StructureController::class)->parameters([
        'secretarias' => 'structure',
    ]);

    Route::match(['get', 'post'], 'telefones/{structure_id}', [PhoneController::class, 'index'])->name('telefones.index');
    Route::match(['get', 'post'], 'telefones/{structure_id}/update/{id}', [PhoneController::class, 'update'])->name('telefones.update');
    Route::match(['get', 'delete'], 'telefones/{structure_id}/destroy/{id}', [PhoneController::class, 'destroy'])->name('telefones.destroy');

    Route::match(['get', 'post'], 'links/{structure_id}', [LinkController::class, 'index'])->name('links.index');
    Route::match(['get', 'post'], 'links/{structure_id}/update/{id}', [LinkController::class, 'update'])->name('links.update');
    Route::match(['get', 'delete'], 'links/{structure_id}/destroy/{id}', [LinkController::class, 'destroy'])->name('links.destroy');

    Route::post('validacao-de-documentos/check-user/{cpf?}', [ValidacaoDocumentosController::class, 'checkUser'])->name('validacaoDocumentos.checkUser');
    Route::post('validacao-de-documentos/status/{validacao}', [ValidacaoDocumentosController::class, 'status'])->name('validacaoDocumentos.status');
    Route::resource('validacao-de-documentos', ValidacaoDocumentosController::class)
        ->names('validacaoDocumentos')
        ->parameters([
            'validacao-de-documentos' => 'validacao',
        ]);

    // Gerenciador de Temas (Portal + Admin)
    Route::resource('temas', ThemeController::class)
        ->names('temas')
        ->parameters(['temas' => 'tema']);

    Route::post('temas/{tema}/activate', [ThemeController::class, 'activate'])
        ->name('temas.activate');

    Route::post('temas/{tema}/reset', [ThemeController::class, 'resetTheme'])
        ->name('temas.resetTheme');

    Route::post('temas/reset-to-default', [ThemeController::class, 'resetToDefault'])
        ->name('temas.resetToDefault');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'pontosFocais']], function () {
    Route::resource('pontos-focais', PontoFocalController::class)
        ->names('pontosFocais')
        ->parameters(['pontos-focais' => 'pontoFocal']);
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'seiAlerta']], function () {
    Route::get('alerta-sei', [SeiAlertaController::class, 'index'])->name('seiAlertas.index');
    Route::put('alerta-sei', [SeiAlertaController::class, 'update'])->name('seiAlertas.update');
    Route::post('alerta-sei/status', [SeiAlertaController::class, 'status'])->name('seiAlertas.status');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'dashboardEstrategico']], function () {
    Route::get('dashboard-estrategico', [StrategicDashboardController::class, 'index'])->name('dashboardEstrategico.index');
    Route::get('dashboard-estrategico/ppp/{id}/export/{type}', [StrategicDashboardController::class, 'exportPpp'])->name('dashboardEstrategico.exportPpp');

    Route::get('dashboard-estrategico/projetos-e-programas', [ProjetosProgramasController::class, 'painelEstrategico'])
        ->name('dashboardEstrategico.projetosProgramas');
    Route::post('dashboard-estrategico/projetos-e-programas/prioridade/toggle/{projeto}', [ProjetosProgramasController::class, 'prioridadeToggleDashboard'])
        ->name('dashboardEstrategico.projetosProgramas.prioridade.toggle');
    Route::post('dashboard-estrategico/projetos-e-programas/prioridades/ordenar', [ProjetosProgramasController::class, 'prioridadesOrdenarDashboard'])
        ->name('dashboardEstrategico.projetosProgramas.prioridades.ordenar');
    Route::get('dashboard-estrategico/projetos-e-programas/prioridades/candidatos', [ProjetosProgramasController::class, 'prioridadesCandidatosDashboard'])
        ->name('dashboardEstrategico.projetosProgramas.prioridades.candidatos');
    Route::post('dashboard-estrategico/projetos-e-programas/prioridades/adicionar', [ProjetosProgramasController::class, 'prioridadesAdicionarDashboard'])
        ->name('dashboardEstrategico.projetosProgramas.prioridades.adicionar');

    Route::get('dashboard-estrategico/projetos-e-programas/relatorio', [ProjetosProgramasController::class, 'relatorioDashboard'])
        ->name('dashboardEstrategico.projetosProgramas.relatorio');

    Route::get('dashboard-estrategico/projetos-e-programas/relatorio/imprimir', [ProjetosProgramasController::class, 'relatorioDashboardImprimir'])
        ->name('dashboardEstrategico.projetosProgramas.relatorio.imprimir');
    Route::get('dashboard-estrategico/projetos-e-programas/mapa/dados', [ProjetosProgramasController::class, 'mapaDadosDashboard'])
        ->name('dashboardEstrategico.projetosProgramas.mapa.dados');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'projetosProgramas']], function () {
    Route::get('projetos-e-programas', [ProjetosProgramasController::class, 'index'])->name('projetosProgramas.index');
    Route::get('projetos-e-programas/create', [ProjetosProgramasController::class, 'create'])->name('projetosProgramas.create');
    Route::get('projetos-e-programas/imprimir/lista', [ProjetosProgramasController::class, 'imprimirLista'])->name('projetosProgramas.imprimirLista');
    Route::get('projetos-e-programas/relatorio', [ProjetosProgramasController::class, 'relatorio'])->name('projetosProgramas.relatorio');
    Route::get('projetos-e-programas/relatorio/imprimir', [ProjetosProgramasController::class, 'relatorioImprimir'])->name('projetosProgramas.relatorio.imprimir');
    Route::get('projetos-e-programas/mapa/dados', [ProjetosProgramasController::class, 'mapaDados'])->name('projetosProgramas.mapa.dados');
    Route::get('projetos-e-programas/{projeto}/visualizar', [ProjetosProgramasController::class, 'visualizar'])->name('projetosProgramas.visualizar');
    Route::get('projetos-e-programas/{projeto}/identificacao', [ProjetosProgramasController::class, 'identificacao'])->name('projetosProgramas.identificacao');
    Route::post('projetos-e-programas/identificacao', [ProjetosProgramasController::class, 'storeIdentificacao'])->name('projetosProgramas.identificacao.store');

    Route::get('projetos-e-programas/{projeto}/cronograma', [ProjetosProgramasController::class, 'cronograma'])->name('projetosProgramas.cronograma');
    Route::post('projetos-e-programas/{projeto}/cronograma', [ProjetosProgramasController::class, 'storeCronograma'])->name('projetosProgramas.cronograma.store');

    Route::get('projetos-e-programas/{projeto}/historicos-andamento', [ProjetosProgramasController::class, 'historicosAndamentoList'])->name('projetosProgramas.historicosAndamento.list');
    Route::post('projetos-e-programas/{projeto}/historicos-andamento', [ProjetosProgramasController::class, 'storeHistoricoAndamento'])->name('projetosProgramas.historicosAndamento.store');

    Route::get('projetos-e-programas/{projeto}/areas', [ProjetosProgramasController::class, 'areas'])->name('projetosProgramas.areas');
    Route::post('projetos-e-programas/{projeto}/areas', [ProjetosProgramasController::class, 'storeAreas'])->name('projetosProgramas.areas.store');

    Route::get('projetos-e-programas/{projeto}/contato', [ProjetosProgramasController::class, 'contato'])->name('projetosProgramas.contato');
    Route::post('projetos-e-programas/{projeto}/contato', [ProjetosProgramasController::class, 'storeContato'])->name('projetosProgramas.contato.store');

    Route::get('projetos-e-programas/{projeto}/dados', [ProjetosProgramasController::class, 'dados'])->name('projetosProgramas.dados');
    Route::post('projetos-e-programas/{projeto}/dados', [ProjetosProgramasController::class, 'storeDados'])->name('projetosProgramas.dados.store');

    Route::get('projetos-e-programas/{projeto}/investimento', [ProjetosProgramasController::class, 'investimento'])->name('projetosProgramas.investimento');
    Route::post('projetos-e-programas/{projeto}/investimento', [ProjetosProgramasController::class, 'storeInvestimento'])->name('projetosProgramas.investimento.store');

    Route::get('projetos-e-programas/{projeto}/imprimir', [ProjetosProgramasController::class, 'imprimir'])->name('projetosProgramas.imprimir');

    Route::get('projetos-e-programas/{projeto}/anexos/view', [ProjetosProgramasController::class, 'anexosView'])->name('projetosProgramas.anexos.view');
    Route::post('projetos-e-programas/{projeto}/anexos/store', [ProjetosProgramasController::class, 'storeAnexos'])->name('projetosProgramas.anexos.store');

    Route::get(
        'projetos-e-programas/{projeto}/anexos',
        [ProjetosProgramasController::class, 'anexos']
    )->name('projetosProgramas.anexos');

    Route::post('projetos-e-programas/{projeto}/upload', [ProjetosProgramasController::class, 'upload'])->name('projetosProgramas.upload');
    Route::get('projetos-e-programas/{projeto}/anexos/{anexo}/download', [ProjetosProgramasController::class, 'downloadAnexo'])->name('projetosProgramas.anexos.download');
    Route::post('projetos-e-programas/{projeto}/anexos/{anexo}/remover', [ProjetosProgramasController::class, 'removeAnexo'])->name('projetosProgramas.anexos.remove');

    Route::get('projetos-e-programas/exclusao-em-massa', [ProjetosProgramasController::class, 'exclusaoEmMassa'])
        ->name('projetosProgramas.exclusaoEmMassa');

    Route::post('projetos-e-programas/excluir-em-massa', [ProjetosProgramasController::class, 'destroyMany'])
        ->name('projetosProgramas.destroyMany');

    Route::delete('projetos-e-programas/{projeto}', [ProjetosProgramasController::class, 'destroy'])->name('projetosProgramas.destroy');

    // Prioridades (drag and drop / toggle)
    Route::post('projetos-e-programas/prioridades/ordenar', [ProjetosProgramasController::class, 'prioridadesOrdenar'])
        ->name('projetosProgramas.prioridades.ordenar');
    Route::get('projetos-e-programas/prioridades/candidatos', [ProjetosProgramasController::class, 'prioridadesCandidatos'])
        ->name('projetosProgramas.prioridades.candidatos');
    Route::post('projetos-e-programas/prioridades/adicionar', [ProjetosProgramasController::class, 'prioridadesAdicionar'])
        ->name('projetosProgramas.prioridades.adicionar');

    Route::post('projetos-e-programas/{projeto}/prioridade/toggle', [ProjetosProgramasController::class, 'prioridadeToggle'])
        ->name('projetosProgramas.prioridade.toggle');

    // CRUD: Programas
    Route::get('projetos-e-programas/programas', [\App\Http\Controllers\ProjetosProgramas\ProgramasController::class, 'index'])
        ->name('projetosProgramas.programas.index');
    Route::get('projetos-e-programas/programas/create', [\App\Http\Controllers\ProjetosProgramas\ProgramasController::class, 'create'])
        ->name('projetosProgramas.programas.create');
    Route::post('projetos-e-programas/programas', [\App\Http\Controllers\ProjetosProgramas\ProgramasController::class, 'store'])
        ->name('projetosProgramas.programas.store');
    Route::get('projetos-e-programas/programas/{programa}/edit', [\App\Http\Controllers\ProjetosProgramas\ProgramasController::class, 'edit'])
        ->name('projetosProgramas.programas.edit');
    Route::put('projetos-e-programas/programas/{programa}', [\App\Http\Controllers\ProjetosProgramas\ProgramasController::class, 'update'])
        ->name('projetosProgramas.programas.update');
    Route::delete('projetos-e-programas/programas/{programa}', [\App\Http\Controllers\ProjetosProgramas\ProgramasController::class, 'destroy'])
        ->name('projetosProgramas.programas.destroy');

    // CRUD: Objetivos
    Route::get('projetos-e-programas/objetivos', [\App\Http\Controllers\ProjetosProgramas\ObjetivosController::class, 'index'])
        ->name('projetosProgramas.objetivos.index');
    Route::get('projetos-e-programas/objetivos/create', [\App\Http\Controllers\ProjetosProgramas\ObjetivosController::class, 'create'])
        ->name('projetosProgramas.objetivos.create');
    Route::post('projetos-e-programas/objetivos', [\App\Http\Controllers\ProjetosProgramas\ObjetivosController::class, 'store'])
        ->name('projetosProgramas.objetivos.store');
    Route::get('projetos-e-programas/objetivos/{objetivo}/edit', [\App\Http\Controllers\ProjetosProgramas\ObjetivosController::class, 'edit'])
        ->name('projetosProgramas.objetivos.edit');
    Route::put('projetos-e-programas/objetivos/{objetivo}', [\App\Http\Controllers\ProjetosProgramas\ObjetivosController::class, 'update'])
        ->name('projetosProgramas.objetivos.update');
    Route::delete('projetos-e-programas/objetivos/{objetivo}', [\App\Http\Controllers\ProjetosProgramas\ObjetivosController::class, 'destroy'])
        ->name('projetosProgramas.objetivos.destroy');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth']], function () {
    Route::post('eventos/status/{evento}', [\App\Http\Controllers\Admin\EventosController::class, 'status'])->name('eventos.status');
    Route::resource('eventos', \App\Http\Controllers\Admin\EventosController::class)->names('eventos');

    // PPPs
    Route::post('ppps/status/{ppp}', [\App\Http\Controllers\Admin\PppController::class, 'status'])->name('ppps.status');
    Route::get('ppps/export/all', [\App\Http\Controllers\Admin\PppController::class, 'exportAllPdf'])->name('ppps.exportAll');
    Route::delete('ppps/historico/{historico}', [\App\Http\Controllers\Admin\PppController::class, 'deleteHistorico'])
        ->name('ppps.historico.delete');
    Route::resource('ppps', \App\Http\Controllers\Admin\PppController::class)->names('ppps');

    // Convênios
    Route::post('convenios/status/{convenio}', [\App\Http\Controllers\Admin\ConvenioController::class, 'status'])->name('convenios.status');
    Route::get('convenios/export/all', [\App\Http\Controllers\Admin\ConvenioController::class, 'exportAllPdf'])->name('convenios.exportAll');
    Route::resource('convenios', \App\Http\Controllers\Admin\ConvenioController::class)->names('convenios');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'parqueTecnologico']], function () {
    Route::get('parque-tecnologico', [ParqueTecnologicoController::class, 'index'])->name('parqueTecnologico.index');
    Route::post('parque-tecnologico/editais/status/{edital}', [EditaisController::class, 'status'])->name('parqueTecnologico.editais.status');
    Route::resource('parque-tecnologico/editais', EditaisController::class)->names('parqueTecnologico.editais')->parameters(['editais' => 'edital']);
    Route::post('parque-tecnologico/decretos-leis/status/{decretoLei}', [DecretosLeisController::class, 'status'])->name('parqueTecnologico.decretosLeis.status');
    Route::resource('parque-tecnologico/decretos-leis', DecretosLeisController::class)->names('parqueTecnologico.decretosLeis')->parameters(['decretos-leis' => 'decretoLei']);

    Route::resource('parque-tecnologico/areas', AreasController::class)
        ->names('parqueTecnologico.areas')
        ->parameters(['areas' => 'area']);

    Route::resource('parque-tecnologico/faqs', FaqsController::class)
        ->names('parqueTecnologico.faqs')
        ->parameters(['faqs' => 'faq']);

    Route::post('parque-tecnologico/startups/status/{startup}', [StartupsController::class, 'status'])
        ->name('parqueTecnologico.startups.status');

    Route::resource('parque-tecnologico/startups', StartupsController::class)
        ->names('parqueTecnologico.startups')
        ->parameters(['startups' => 'startup']);
});

// Módulo administrativo de cadastro de pessoas trans desativado.
// Route::group(['prefix' => 'admin/saude', 'as' => 'admin.saude.', 'middleware' => ['auth', 'pessoasTrans']], function () {
//     Route::resource('pessoas-trans', PessoasTransController::class)
//         ->names('pessoas-trans')
//         ->parameters(['pessoas-trans' => 'pessoas_trans']);
//
//     Route::post('pessoas-trans/relatorio', [PessoasTransController::class, 'relatorio'])
//         ->name('pessoas-trans.relatorio');
// });

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'mobiangra']], function () {
    Route::get('mobiangra', [MobiangraController::class, 'adminIndex'])->name('mobiangra.index');
    Route::post('mobiangra/force-update', [MobiangraController::class, 'adminForceUpdate'])->name('mobiangra.forceUpdate');
    Route::post('mobiangra/upload-gtfs', [MobiangraController::class, 'adminUploadGtfs'])->name('mobiangra.uploadGtfs');
    Route::post('mobiangra/settings', [MobiangraController::class, 'adminSaveSettings'])->name('mobiangra.saveSettings');
    Route::get('mobiangra/fleet/download', [MobiangraController::class, 'adminDownloadFleet'])->name('mobiangra.downloadFleet');
    Route::post('mobiangra/fleet/upload', [MobiangraController::class, 'adminUploadFleet'])->name('mobiangra.uploadFleet');
    Route::post('mobiangra/fleet/reset', [MobiangraController::class, 'adminResetFleet'])->name('mobiangra.resetFleet');
    // ── CRUD Horários ──────────────────────────────────────────────────────────
    // Linhas
    Route::get('mobiangra/horarios/linhas',              [MobiangraController::class, 'adminHorariosLinhas'])->name('mobiangra.horarios.linhas');
    Route::get('mobiangra/horarios/linhas/buscar',      [MobiangraController::class, 'adminHorariosLinhasBuscar'])->name('mobiangra.horarios.linhas.buscar');
    Route::get('mobiangra/horarios/linhas/create',       [MobiangraController::class, 'adminHorariosLinhaCreate'])->name('mobiangra.horarios.linhas.create');
    Route::post('mobiangra/horarios/linhas',             [MobiangraController::class, 'adminHorariosLinhaStore'])->name('mobiangra.horarios.linhas.store');
    Route::get('mobiangra/horarios/linhas/{linha}/edit', [MobiangraController::class, 'adminHorariosLinhaEdit'])->name('mobiangra.horarios.linhas.edit');
    Route::put('mobiangra/horarios/linhas/{linha}',      [MobiangraController::class, 'adminHorariosLinhaUpdate'])->name('mobiangra.horarios.linhas.update');
    Route::delete('mobiangra/horarios/linhas/{linha}',   [MobiangraController::class, 'adminHorariosLinhaDestroy'])->name('mobiangra.horarios.linhas.destroy');
    Route::post('mobiangra/horarios/linhas/{linha}/status', [MobiangraController::class, 'adminHorariosLinhaStatus'])->name('mobiangra.horarios.linhas.status');

    // Seções (dentro de uma linha)
    Route::post('mobiangra/horarios/linhas/{linha}/secoes',           [MobiangraController::class, 'adminHorariosSecaoStore'])->name('mobiangra.horarios.secoes.store');
    Route::put('mobiangra/horarios/secoes/{secao}',                   [MobiangraController::class, 'adminHorariosSecaoUpdate'])->name('mobiangra.horarios.secoes.update');
    Route::delete('mobiangra/horarios/secoes/{secao}',                [MobiangraController::class, 'adminHorariosSecaoDestroy'])->name('mobiangra.horarios.secoes.destroy');

    // Grades (horários por período dentro de uma seção)
    Route::post('mobiangra/horarios/secoes/{secao}/grades',           [MobiangraController::class, 'adminHorariosGradeStore'])->name('mobiangra.horarios.grades.store');
    Route::delete('mobiangra/horarios/grades/{grade}',                [MobiangraController::class, 'adminHorariosGradeDestroy'])->name('mobiangra.horarios.grades.destroy');

    // Importação XLSX (opcional, para recarregar o banco rapidamente)
    Route::post('mobiangra/horarios/importar-xlsx', [MobiangraController::class, 'adminHorariosImportarXlsx'])->name('mobiangra.horarios.importarXlsx');

    Route::get('mobiangra/manifestacoes/{manifestacao}', [MobiangraController::class, 'adminManifestacaoShow'])
        ->name('mobiangra.manifestacoes.show');
    Route::post('mobiangra/manifestacoes/{manifestacao}/mensagem', [MobiangraController::class, 'adminManifestacaoNovaMensagem'])
        ->name('mobiangra.manifestacoes.novaMensagem');

    Route::post('mobiangra/alertas', [MobiangraController::class, 'adminAlertaStore'])->name('mobiangra.alertas.store');
    Route::put('mobiangra/alertas/{alerta}', [MobiangraController::class, 'adminAlertaUpdate'])->name('mobiangra.alertas.update');
    Route::delete('mobiangra/alertas/{alerta}', [MobiangraController::class, 'adminAlertaDestroy'])->name('mobiangra.alertas.destroy');
    Route::post('mobiangra/alertas/{alerta}/status', [MobiangraController::class, 'adminAlertaStatus'])->name('mobiangra.alertas.status');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'licitacoesProcedimentos']], function () {
    Route::resource('licitacoes-procedimentos', LicitacaoProcedimentoController::class)
        ->names('licitacoesProcedimentos')
        ->parameters(['licitacoes-procedimentos' => 'licitacaoProcedimento']);

    Route::get(
        'licitacoes-procedimentos/{licitacaoProcedimento}/uploads/{upload}/download',
        [LicitacaoProcedimentoController::class, 'downloadUpload']
    )->name('licitacoesProcedimentos.uploads.download');

    Route::get(
        'licitacoes-procedimentos/{licitacaoProcedimento}/uploads',
        [LicitacaoProcedimentoController::class, 'uploads']
    )->name('licitacoesProcedimentos.uploads');

    Route::post(
        'licitacoes-procedimentos/{licitacaoProcedimento}/uploads',
        [LicitacaoProcedimentoController::class, 'storeUpload']
    )->name('licitacoesProcedimentos.uploads.store');

    Route::put(
        'licitacoes-procedimentos/{licitacaoProcedimento}/uploads/{upload}',
        [LicitacaoProcedimentoController::class, 'updateUpload']
    )->name('licitacoesProcedimentos.uploads.update');

    Route::delete(
        'licitacoes-procedimentos/{licitacaoProcedimento}/uploads/{upload}',
        [LicitacaoProcedimentoController::class, 'destroyUpload']
    )->name('licitacoesProcedimentos.uploads.destroy');

    Route::get(
        'licitacoes-procedimentos/{licitacaoProcedimento}/homologacao',
        [LicitacaoProcedimentoController::class, 'homologacao']
    )->name('licitacoesProcedimentos.homologacao');

    Route::put(
        'licitacoes-procedimentos/{licitacaoProcedimento}/homologacao',
        [LicitacaoProcedimentoController::class, 'updateHomologacao']
    )->name('licitacoesProcedimentos.homologacao.update');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'contratos']], function () {
    Route::get('contratos/search-licitacoes', [ContratoController::class, 'searchLicitacoes'])
        ->name('contratos.searchLicitacoes');

    Route::resource('contratos', ContratoController::class)
        ->names('contratos')
        ->parameters(['contratos' => 'contrato']);

    Route::get(
        'contratos/{contrato}/arquivos',
        [ContratoController::class, 'arquivos']
    )->name('contratos.arquivos');

    Route::post(
        'contratos/{contrato}/arquivos',
        [ContratoController::class, 'storeArquivo']
    )->name('contratos.arquivos.store');

    Route::put(
        'contratos/{contrato}/arquivos/{contrato_arquivo}',
        [ContratoController::class, 'updateArquivo']
    )->name('contratos.arquivos.update');

    Route::delete(
        'contratos/{contrato}/arquivos/{contrato_arquivo}',
        [ContratoController::class, 'destroyArquivo']
    )->name('contratos.arquivos.destroy');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'atas']], function () {
    Route::get('atas/search-licitacoes', [AtaController::class, 'searchLicitacoes'])
        ->name('atas.searchLicitacoes');

    Route::resource('atas', AtaController::class)
        ->except(['show'])
        ->names('atas')
        ->parameters(['atas' => 'ata']);
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'legislacao']], function () {
    Route::resource('legislacao', LegislacaoController::class)
        ->except(['show'])
        ->names('legislacao')
        ->parameters(['legislacao' => 'legislacao']);

    Route::post('legislacao/{legislacao}/retificacoes', [LegislacaoRetificacaoController::class, 'store'])
        ->name('legislacao.retificacoes.store');
    Route::get('legislacao/{legislacao}/retificacoes/{retificacao}/edit', [LegislacaoRetificacaoController::class, 'edit'])
        ->name('legislacao.retificacoes.edit');
    Route::put('legislacao/{legislacao}/retificacoes/{retificacao}', [LegislacaoRetificacaoController::class, 'update'])
        ->name('legislacao.retificacoes.update');
    Route::delete('legislacao/{legislacao}/retificacoes/{retificacao}', [LegislacaoRetificacaoController::class, 'destroy'])
        ->name('legislacao.retificacoes.destroy');

    Route::group(['prefix' => 'legislacao', 'as' => 'legislacao.'], function () {
        Route::get('cadastros', [LegislacaoCadastrosController::class, 'index'])->name('cadastros.index');

        Route::resource('portarias', LegislacaoPortariaController::class)
            ->except(['show'])
            ->parameters(['portarias' => 'portaria']);

        Route::post('portarias/{portaria}/retificacoes', [LegislacaoPortariaRetificacaoController::class, 'store'])
            ->name('portarias.retificacoes.store');
        Route::get('portarias/{portaria}/retificacoes/{retificacao}/edit', [LegislacaoPortariaRetificacaoController::class, 'edit'])
            ->name('portarias.retificacoes.edit');
        Route::put('portarias/{portaria}/retificacoes/{retificacao}', [LegislacaoPortariaRetificacaoController::class, 'update'])
            ->name('portarias.retificacoes.update');
        Route::delete('portarias/{portaria}/retificacoes/{retificacao}', [LegislacaoPortariaRetificacaoController::class, 'destroy'])
            ->name('portarias.retificacoes.destroy');

        Route::resource('tipos', LegislacaoTiposController::class)
            ->except(['show'])
            ->parameters(['tipos' => 'tipo']);
        Route::resource('categorias', LegislacaoCategoriasController::class)
            ->except(['show'])
            ->parameters(['categorias' => 'categoria']);
        Route::resource('cargos', LegislacaoCargosController::class)
            ->except(['show'])
            ->parameters(['cargos' => 'cargo']);
        Route::resource('autores', LegislacaoAutoresController::class)
            ->except(['show'])
            ->parameters(['autores' => 'autor']);
    });
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'cartaServicos']], function () {
    Route::get('carta-de-servicos', [CartaServicosController::class, 'index'])->name('cartaServicos.index');
    Route::get('carta-de-servicos/create', [CartaServicosController::class, 'create'])->name('cartaServicos.create');
    Route::post('carta-de-servicos', [CartaServicosController::class, 'store'])->name('cartaServicos.store');
    Route::get('carta-de-servicos/{cartaServico}/edit', [CartaServicosController::class, 'edit'])->name('cartaServicos.edit');
    Route::put('carta-de-servicos/{cartaServico}', [CartaServicosController::class, 'update'])->name('cartaServicos.update');
    Route::delete('carta-de-servicos/{cartaServico}', [CartaServicosController::class, 'destroy'])->name('cartaServicos.destroy');

    Route::get('carta-de-servicos/categorias/create', [CartaServicosController::class, 'createTipo'])->name('cartaServicos.tipos.create');
    Route::post('carta-de-servicos/categorias', [CartaServicosController::class, 'storeTipo'])->name('cartaServicos.tipos.store');
    Route::put('carta-de-servicos/categorias/{tipo}', [CartaServicosController::class, 'updateTipo'])->name('cartaServicos.tipos.update');
    Route::delete('carta-de-servicos/categorias/{tipo}', [CartaServicosController::class, 'destroyTipo'])->name('cartaServicos.tipos.destroy');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'indicadoresTi']], function () {

    Route::get('indicadoresTi', [IndicadoresTiController::class, 'index'])->name('indicadoresTi.index');
    Route::post('indicadoresTi', [IndicadoresTiController::class, 'store'])->name('indicadoresTi.store');
    Route::post('indicadoresTi/clientes', [IndicadoresTiController::class, 'storeCliente'])->name('indicadoresTi.clientes.store');

    Route::get('indicadoresTi/relatorio', [IndicadoresTiRelatorioController::class, 'index'])->name('indicadoresTi.relatorio.index');
    Route::post('indicadoresTi/relatorio/pdf', [IndicadoresTiRelatorioController::class, 'exportarPdf'])->name('indicadoresTi.relatorio.pdf');
    Route::post('indicadoresTi/relatorio/csv', [IndicadoresTiRelatorioController::class, 'exportarCsv'])->name('indicadoresTi.relatorio.csv');
    Route::get('indicadoresTi/relatorio/assuntos/{setor}', [IndicadoresTiRelatorioController::class, 'assuntosPorSetor'])->name('indicadoresTi.relatorio.assuntos');
    Route::get('indicadoresTi/relatorio/subassuntos/{assunto}', [IndicadoresTiRelatorioController::class, 'subassuntosPorAssunto'])->name('indicadoresTi.relatorio.subassuntos');
    Route::post('indicadoresTi/relatorio/pdf-matricial', [IndicadoresTiRelatorioController::class, 'exportarPdfMatricial'])
        ->name('indicadoresTi.relatorio.pdf.matricial');

    Route::get('indicadoresTi/relatorio/assuntos/{setor}', [IndicadoresTiRelatorioController::class, 'assuntosPorSetor'])->name('indicadoresTi.relatorio.assuntos');
    Route::get('indicadoresTi/relatorio/subassuntos/{assunto}', [IndicadoresTiRelatorioController::class, 'subassuntosPorAssunto'])->name('indicadoresTi.relatorio.subassuntos');

    Route::get('indicadoresTi/assuntos/{setor}', [IndicadoresTiController::class, 'assuntosPorSetor'])->name('indicadoresTi.assuntos');
    Route::get('indicadoresTi/subassuntos/{assunto}', [IndicadoresTiController::class, 'subassuntosPorAssunto'])->name('indicadoresTi.subassuntos');

    Route::get('indicadoresTi/gerenciar/clientes', [GerenciarClientesController::class, 'index'])->name('indicadoresTi.gerenciar.clientes');
    Route::post('indicadoresTi/gerenciar/clientes', [GerenciarClientesController::class, 'store'])->name('indicadoresTi.gerenciar.clientes.store');
    Route::get('indicadoresTi/gerenciar/clientes/{cliente}', [GerenciarClientesController::class, 'show'])->name('indicadoresTi.gerenciar.clientes.show');
    Route::put('indicadoresTi/gerenciar/clientes/{cliente}', [GerenciarClientesController::class, 'update'])->name('indicadoresTi.gerenciar.clientes.update');
    Route::delete('indicadoresTi/gerenciar/clientes/{cliente}', [GerenciarClientesController::class, 'destroy'])->name('indicadoresTi.gerenciar.clientes.destroy');

    Route::get('indicadoresTi/gerenciar/assuntos', [GerenciarAssuntosController::class, 'index'])->name('indicadoresTi.gerenciar');
    Route::post('indicadoresTi/gerenciar/setores', [GerenciarAssuntosController::class, 'storeSetor'])->name('indicadoresTi.gerenciar.setores.store');
    Route::put('indicadoresTi/gerenciar/setores/{setor}', [GerenciarAssuntosController::class, 'updateSetor'])->name('indicadoresTi.gerenciar.setores.update');
    Route::delete('indicadoresTi/gerenciar/setores/{setor}', [GerenciarAssuntosController::class, 'destroySetor'])->name('indicadoresTi.gerenciar.setores.destroy');
    Route::post('indicadoresTi/gerenciar/assuntos', [GerenciarAssuntosController::class, 'storeAssunto'])->name('indicadoresTi.gerenciar.assuntos.store');
    Route::put('indicadoresTi/gerenciar/assuntos/{assunto}', [GerenciarAssuntosController::class, 'updateAssunto'])->name('indicadoresTi.gerenciar.assuntos.update');
    Route::delete('indicadoresTi/gerenciar/assuntos/{assunto}', [GerenciarAssuntosController::class, 'destroyAssunto'])->name('indicadoresTi.gerenciar.assuntos.destroy');
    Route::post('indicadoresTi/gerenciar/subassuntos', [GerenciarAssuntosController::class, 'storeSubassunto'])->name('indicadoresTi.gerenciar.subassuntos.store');
    Route::put('indicadoresTi/gerenciar/subassuntos/{subassunto}', [GerenciarAssuntosController::class, 'updateSubassunto'])->name('indicadoresTi.gerenciar.subassuntos.update');
    Route::delete('indicadoresTi/gerenciar/subassuntos/{subassunto}', [GerenciarAssuntosController::class, 'destroySubassunto'])->name('indicadoresTi.gerenciar.subassuntos.destroy');
    Route::get('indicadoresTi/clientes/buscar', [IndicadoresTiController::class, 'buscarClientes'])->name('indicadoresTi.clientes.buscar');
    Route::get('indicadoresTi/unidades/buscar', [IndicadoresTiController::class, 'buscarUnidades'])->name('indicadoresTi.unidades.buscar');

    Route::get('indicadoresTi/{chamado}', [IndicadoresTiController::class, 'show'])->name('indicadoresTi.show');
    Route::put('indicadoresTi/{chamado}', [IndicadoresTiController::class, 'update'])->name('indicadoresTi.update');
    Route::post('indicadoresTi/{chamado}/concluir', [IndicadoresTiController::class, 'concluir'])->name('indicadoresTi.concluir');
    Route::post('indicadoresTi/{chamado}/participantes', [IndicadoresTiController::class, 'adicionarParticipante'])->name('indicadoresTi.participantes.store');
    Route::delete('indicadoresTi/{chamado}/participantes', [IndicadoresTiController::class, 'removerParticipante'])->name('indicadoresTi.participantes.destroy');
    Route::delete('indicadoresTi/{chamado}', [IndicadoresTiController::class, 'destroy'])->name('indicadoresTi.destroy');
    Route::get('indicadoresTi/{chamado}/fechar-aba', [IndicadoresTiController::class, 'fecharAba'])->name('indicadoresTi.fecharAba');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'unidadesOrganizacionais']], function () {
    Route::post('unidades-organizacionais/status/{unidade_organizacional}', [UnidadeOrganizacionalController::class, 'status'])
        ->name('unidadesOrganizacionais.status');
    Route::resource('unidades-organizacionais', UnidadeOrganizacionalController::class)
        ->names('unidadesOrganizacionais')
        ->parameters(['unidades-organizacionais' => 'unidade_organizacional']);
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'gerenciadorDemandas']], function () {
    Route::get('demandas',                               [DemandaController::class, 'dashboard'])->name('demandas.dashboard');
    Route::get('demandas/lista',                         [DemandaController::class, 'index'])->name('demandas.index');
    Route::post('demandas',                              [DemandaController::class, 'store'])->name('demandas.store');
    Route::get('demandas/criar',                         [DemandaController::class, 'create'])->name('demandas.create');
    Route::get('demandas/responsaveis/buscar',           [DemandaController::class, 'buscarResponsaveis'])->name('demandas.responsaveis.buscar');
    Route::get('demandas/ti/assuntos/{setor}',           [DemandaTiController::class, 'assuntos'])->name('demandas.ti.assuntos');
    Route::get('demandas/ti/subassuntos/{assunto}',      [DemandaTiController::class, 'subassuntos'])->name('demandas.ti.subassuntos');
    Route::get('demandas/ti/solicitantes',               [DemandaTiController::class, 'buscarSolicitantes'])->name('demandas.ti.solicitantes');
    Route::post('demandas/ti/clientes',                  [DemandaTiController::class, 'storeCliente'])->name('demandas.ti.clientes.store');
    Route::get('demandas/relatorio',                     [DemandaRelatorioController::class, 'index'])->name('demandas.relatorio.index');
    Route::get('demandas/relatorio/pdf-resumido',        [DemandaRelatorioController::class, 'exportarPdfResumido'])->name('demandas.relatorio.pdf-resumido');
    Route::get('demandas/relatorio/pdf-detalhado',       [DemandaRelatorioController::class, 'exportarPdfDetalhado'])->name('demandas.relatorio.pdf-detalhado');
    Route::get('demandas/relatorio/pdf-matricial',       [DemandaRelatorioController::class, 'exportarPdfMatricial'])->name('demandas.relatorio.pdf-matricial');
    Route::get('demandas/relatorio/csv',                 [DemandaRelatorioController::class, 'exportarCsv'])->name('demandas.relatorio.csv');
    Route::get('demandas/{demanda}',                     [DemandaController::class, 'show'])->name('demandas.show');
    Route::put('demandas/{demanda}',                     [DemandaController::class, 'update'])->name('demandas.update');
    Route::post('demandas/{demanda}/mover',              [DemandaController::class, 'moverStatus'])->name('demandas.mover');
    Route::post('demandas/{demanda}/interagir',          [DemandaController::class, 'interagir'])->name('demandas.interagir');
    Route::post('demandas/{demanda}/destinatarios',                        [DemandaController::class, 'destinatarioStore'])->name('demandas.destinatarios.store');
    Route::patch('demandas/{demanda}/destinatarios/{destinatario}/status',  [DemandaController::class, 'destinatarioStatus'])->name('demandas.destinatarios.status');
    Route::patch('demandas/{demanda}/destinatarios/{destinatario}/aceitar', [DemandaController::class, 'aceitarDestinatario'])->name('demandas.destinatarios.aceitar');
    Route::delete('demandas/{demanda}/destinatarios/{destinatario}',       [DemandaController::class, 'destinatarioDestroy'])->name('demandas.destinatarios.destroy');
    Route::post('demandas/{demanda}/subtarefas',         [DemandaController::class, 'subtarefaStore'])->name('demandas.subtarefas.store');
    Route::patch('demandas/{demanda}/subtarefas/{subtarefa}', [DemandaController::class, 'subtarefaToggle'])->name('demandas.subtarefas.toggle');
    Route::delete('demandas/{demanda}/subtarefas/{subtarefa}', [DemandaController::class, 'subtarefaDestroy'])->name('demandas.subtarefas.destroy');
    Route::post('demandas/{demanda}/anexos',                   [DemandaController::class, 'anexoStore'])->name('demandas.anexos.store');
    Route::get('demandas/{demanda}/anexos/{anexo}/visualizar',  [DemandaController::class, 'anexoView'])->name('demandas.anexos.view');
    Route::get('demandas/{demanda}/anexos/{anexo}/baixar',     [DemandaController::class, 'anexoDownload'])->name('demandas.anexos.download');
    Route::delete('demandas/{demanda}/anexos/{anexo}',         [DemandaController::class, 'anexoDestroy'])->name('demandas.anexos.destroy');

    Route::get('demandas/gerenciar/clientes',                   [DemandaGerenciarClientesController::class, 'index'])->name('demandas.gerenciar.clientes');
    Route::post('demandas/gerenciar/clientes',                  [DemandaGerenciarClientesController::class, 'store'])->name('demandas.gerenciar.clientes.store');
    Route::get('demandas/gerenciar/clientes/{cliente}',         [DemandaGerenciarClientesController::class, 'show'])->name('demandas.gerenciar.clientes.show');
    Route::put('demandas/gerenciar/clientes/{cliente}',         [DemandaGerenciarClientesController::class, 'update'])->name('demandas.gerenciar.clientes.update');
    Route::delete('demandas/gerenciar/clientes/{cliente}',      [DemandaGerenciarClientesController::class, 'destroy'])->name('demandas.gerenciar.clientes.destroy');

    Route::get('demandas/gerenciar/assuntos',                              [DemandaGerenciarAssuntosController::class, 'index'])->name('demandas.gerenciar.assuntos');
    Route::post('demandas/gerenciar/setores',                              [DemandaGerenciarAssuntosController::class, 'storeSetor'])->name('demandas.gerenciar.setores.store');
    Route::put('demandas/gerenciar/setores/{setor}',                       [DemandaGerenciarAssuntosController::class, 'updateSetor'])->name('demandas.gerenciar.setores.update');
    Route::delete('demandas/gerenciar/setores/{setor}',                    [DemandaGerenciarAssuntosController::class, 'destroySetor'])->name('demandas.gerenciar.setores.destroy');
    Route::post('demandas/gerenciar/assuntos',                             [DemandaGerenciarAssuntosController::class, 'storeAssunto'])->name('demandas.gerenciar.assuntos.store');
    Route::put('demandas/gerenciar/assuntos/{assunto}',                    [DemandaGerenciarAssuntosController::class, 'updateAssunto'])->name('demandas.gerenciar.assuntos.update');
    Route::delete('demandas/gerenciar/assuntos/{assunto}',                 [DemandaGerenciarAssuntosController::class, 'destroyAssunto'])->name('demandas.gerenciar.assuntos.destroy');
    Route::post('demandas/gerenciar/subassuntos',                          [DemandaGerenciarAssuntosController::class, 'storeSubassunto'])->name('demandas.gerenciar.subassuntos.store');
    Route::put('demandas/gerenciar/subassuntos/{subassunto}',              [DemandaGerenciarAssuntosController::class, 'updateSubassunto'])->name('demandas.gerenciar.subassuntos.update');
    Route::delete('demandas/gerenciar/subassuntos/{subassunto}',           [DemandaGerenciarAssuntosController::class, 'destroySubassunto'])->name('demandas.gerenciar.subassuntos.destroy');
    Route::patch('demandas/gerenciar/setores/{setor}/publico',             [DemandaGerenciarAssuntosController::class, 'toggleSetorPublico'])->name('demandas.gerenciar.setores.publico');
    Route::patch('demandas/gerenciar/assuntos/{assunto}/publico',          [DemandaGerenciarAssuntosController::class, 'toggleAssuntoPublico'])->name('demandas.gerenciar.assuntos.publico');
    Route::patch('demandas/gerenciar/subassuntos/{subassunto}/publico',    [DemandaGerenciarAssuntosController::class, 'toggleSubassuntoPublico'])->name('demandas.gerenciar.subassuntos.publico');
});

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'ativosTi']], function () {
    Route::get('ativos-ti',                                                [AtivosTiController::class, 'index'])->name('ativosTi.index');
    Route::get('ativos-ti/equipamentos',                                   fn() => redirect()->route('admin.ativosTi.index', ['aba' => 'equipamentos']))->name('ativosTi.equipamentos.index');
    Route::get('ativos-ti/equipamentos/criar',                             [EquipamentosController::class, 'create'])->name('ativosTi.equipamentos.create');
    Route::post('ativos-ti/equipamentos',                                  [EquipamentosController::class, 'store'])->name('ativosTi.equipamentos.store');
    Route::get('ativos-ti/equipamentos/buscar',                            [EquipamentosController::class, 'buscar'])->name('ativosTi.equipamentos.buscar');
    Route::get('ativos-ti/equipamentos/{equipamento}',                     [EquipamentosController::class, 'show'])->name('ativosTi.equipamentos.show');
    Route::get('ativos-ti/equipamentos/{equipamento}/editar',              [EquipamentosController::class, 'edit'])->name('ativosTi.equipamentos.edit');
    Route::put('ativos-ti/equipamentos/{equipamento}',                     [EquipamentosController::class, 'update'])->name('ativosTi.equipamentos.update');
    Route::delete('ativos-ti/equipamentos/{equipamento}',                  [EquipamentosController::class, 'destroy'])->name('ativosTi.equipamentos.destroy');
    Route::put('ativos-ti/equipamentos/{equipamento}/especificacoes',      [EquipamentosController::class, 'salvarEspecificacoes'])->name('ativosTi.equipamentos.especificacoes.update');
    Route::get('ativos-ti/equipamentos/{equipamento}/laudo',               [EquipamentosController::class, 'laudo'])->name('ativosTi.equipamentos.laudo');
    Route::post('demandas/{demanda}/equipamentos',                         [EquipamentosController::class, 'vincularDemanda'])->name('ativosTi.equipamentos.vincular');
    Route::delete('demandas/{demanda}/equipamentos/{equipamento}',         [EquipamentosController::class, 'desvincularDemanda'])->name('ativosTi.equipamentos.desvincular');
    Route::post('demandas/{demanda}/licencas',                             [EquipamentosController::class, 'vincularLicencaDemanda'])->name('ativosTi.licencas.vincular');
    Route::delete('demandas/{demanda}/licencas/{licenca}',                 [EquipamentosController::class, 'desvincularLicencaDemanda'])->name('ativosTi.licencas.desvincular');
    Route::get('ativos-ti/licencas',                                       fn() => redirect()->route('admin.ativosTi.index', ['aba' => 'licencas']))->name('ativosTi.licencas.index');
    Route::get('ativos-ti/licencas/criar',                                 [LicencasController::class, 'create'])->name('ativosTi.licencas.create');
    Route::post('ativos-ti/licencas',                                      [LicencasController::class, 'store'])->name('ativosTi.licencas.store');
    Route::get('ativos-ti/licencas/{licenca}',                             [LicencasController::class, 'show'])->name('ativosTi.licencas.show');
    Route::get('ativos-ti/licencas/{licenca}/editar',                      [LicencasController::class, 'edit'])->name('ativosTi.licencas.edit');
    Route::put('ativos-ti/licencas/{licenca}',                             [LicencasController::class, 'update'])->name('ativosTi.licencas.update');
    Route::delete('ativos-ti/licencas/{licenca}',                          [LicencasController::class, 'destroy'])->name('ativosTi.licencas.destroy');
});

Route::group([
    'prefix' => 'admin/observatorio',
    'as' => 'admin.observatorio.',
    'middleware' => ['auth', 'observatorio'],
], function () {
    Route::resource('indicadores', \App\Http\Controllers\Observatorio\IndicadorController::class)
        ->except(['show'])
        ->names('indicadores')
        ->parameters(['indicadores' => 'indicador']);

    Route::resource('temas', \App\Http\Controllers\Observatorio\TemaController::class)
        ->except(['show'])
        ->names('temas')
        ->parameters(['temas' => 'tema']);

    Route::resource('mapa-temas', \App\Http\Controllers\Observatorio\MapaTemaController::class)
        ->except(['show'])
        ->names('mapaTemas')
        ->parameters(['mapa-temas' => 'mapaTema']);

    Route::resource('mapas', \App\Http\Controllers\Observatorio\MapaController::class)
        ->except(['show'])
        ->names('mapas')
        ->parameters(['mapas' => 'mapa']);
});

Route::group(['prefix' => '', 'as' => 'admin.'], function () {

    Route::get('/login/govbr', [GovBrController::class, 'redirectToProvider'])->name('login.govbr')->middleware('throttle:auth');
    Route::get('/login/callback', [GovBrController::class, 'handleProviderCallback'])->name('login.govbr.callback')->middleware('throttle:auth');
    Route::get('/logout/govbr', [GovBrController::class, 'logout'])->name('logout.govbr');

    Route::get('login', [AuthenticationController::class, 'login'])->name('login');
    Route::post('login', [AuthenticationController::class, 'authentication'])->name('loginAuthentication')->middleware('throttle:auth');
    Route::get('logout', [AuthenticationController::class, 'logout'])->name('logout');

    Route::get('esqueceu-senha', [RecuperacaoDeSenhaController::class, 'esqueceuSenha'])->name('esqueceuSenha');
    Route::post('esqueceu-senha', [RecuperacaoDeSenhaController::class, 'enviarEmailRecuperacao'])->name('enviarEmailRecuperacao')->middleware('throttle:password-recovery');

    Route::get('nova-conta/{token}', [NovaContaAngraController::class, 'create'])->name('novaConta');
    Route::post('nova-conta/{token}', [NovaContaAngraController::class, 'store'])->name('novaContaStore')->middleware('throttle:password-recovery');

    Route::resource('contas', ContasPublicasController::class)
        ->names('contas.publicas')
        ->parameters([
            'contas' => 'user',
        ]);
});
