<?php
use App\Http\Controllers\Auth\LoginController;
use App\Http\Controllers\Dashboard\DashboardController;
use App\Http\Controllers\Logs\LogController;
use App\Http\Controllers\Processamento\ImportacaoController;
use App\Http\Controllers\Processamento\ValidacaoController;
use App\Http\Controllers\Processamento\PontuacaoController;
use App\Http\Controllers\Processamento\ResultadoController;
use App\Http\Controllers\Relatorios\RelatorioController;
use App\Http\Controllers\Tabelas\TabelaController;
use App\Http\Controllers\Tabelas\RecordsController;
use App\Http\Controllers\Dxcc\DxccController;
use App\Http\Controllers\Gestao\GestaoContestController;
use App\Http\Controllers\Public\LogSubmissionController;
use Illuminate\Support\Facades\Route;
 
Route::get('/', fn() => redirect()->route('dashboard'));
 
// Autenticação
Route::get('/login',   [LoginController::class, 'showForm'])->name('login');
Route::post('/login',  [LoginController::class, 'login'])->name('login.post');
Route::post('/logout', [LoginController::class, 'logout'])->name('logout');
 
// Área protegida
 
 
// ── Rotas públicas (sem autenticação) ────────────────────────────────────────
Route::prefix('contest')->name('public.')->group(function () {
    Route::get('/enviar-log',     [LogSubmissionController::class, 'index'])->name('log.index');
    Route::post('/enviar-log',    [LogSubmissionController::class, 'store'])->name('log.store');
    Route::get('/logs-recebidos', [LogSubmissionController::class, 'lista'])->name('logs.lista');
    Route::get('/limit-young',    [LogSubmissionController::class, 'limitYoung'])->name('log.limit-young');
});
 
// ── Resultados públicos (sem login) — liberados após Etapa 10 concluída ────────
Route::prefix('resultados')->name('public.resultados.')->group(function () {
    Route::get('/',           [\App\Http\Controllers\Public\ResultadosPublicosController::class, 'resultado'])->name('resultado');
    Route::get('/records',    [\App\Http\Controllers\Public\ResultadosPublicosController::class, 'records'])->name('records');
    Route::get('/callsign',   [\App\Http\Controllers\Public\ResultadosPublicosController::class, 'callsign'])->name('callsign');
    Route::get('/clubes',     [\App\Http\Controllers\Public\ResultadosPublicosController::class, 'clubes'])->name('clubes');
});
 
Route::middleware(['auth'])->group(function () {
 
    Route::get('/dashboard',        [DashboardController::class, 'index'])->name('dashboard');
    // Rota de emergência para limpar sessões travadas de processamento
    Route::get('/dashboard/limpar-sessao', function() {
        foreach ([
            'imp','junta','valida','tempo','claimed',
            'contato','semlogs','pontos','final','resultado','records',
        ] as $p) {
            foreach (['status','progresso','concluido','resultado','total','atual'] as $k) {
                session()->forget("{$p}_{$k}");
            }
        }
        session()->save();
        return redirect()->route('dashboard')
                         ->with('sucesso', 'Sessões de processamento limpas com sucesso.');
    })->name('dashboard.limpar-sessao');
    Route::get('/dashboard/resetar', [DashboardController::class, 'resetar'])->name('dashboard.resetar');
    Route::post('/dashboard/resetar',[DashboardController::class, 'confirmarReset'])->name('dashboard.confirmar-reset');
 
    // LOGs
    Route::prefix('logs')->name('logs.')->group(function () {
        Route::get('/',           [LogController::class, 'index'])->name('index');
        Route::get('/recebidos',  [LogController::class, 'recebidos'])->name('recebidos');
        // Rota POST usada por ambas as views (index e recebidos apontam para a mesma view)
        Route::post('/processar', [LogController::class, 'recebidosProcessar'])->name('recebidos.processar');
        Route::get('/ver/{arquivo}',  [LogController::class, 'verLog'])->name('ver')->where('arquivo', '.+');
        Route::get('/duplicados',  [LogController::class, 'duplicados'])->name('duplicados');
        Route::get('/sem-log',     [LogController::class, 'semLog'])->name('sem-log');
        Route::get('/envia-logs',  [LogController::class, 'enviaLogs'])->name('envia-logs');
    });
 
    // DXCC — consulta por callsign
    Route::prefix('dxcc')->name('dxcc.')->group(function () {
        Route::get('/',        [DxccController::class, 'index'])->name('index');
        Route::get('/lookup',  [DxccController::class, 'lookup'])->name('lookup');
        Route::get('/api',     [DxccController::class, 'api'])->name('api');
    });
 
    // Gestão de Contests
    Route::prefix('gestao/contests')->name('gestao.contests.')->group(function () {
        Route::get('/',                          [GestaoContestController::class, 'index'])->name('index');
        Route::post('/{id}/ativar',              [GestaoContestController::class, 'ativar'])->name('ativar');
        Route::post('/{id}/arquivar',            [GestaoContestController::class, 'arquivar'])->name('arquivar');
        Route::post('/{id}/reprocessar',         [GestaoContestController::class, 'reprocessar'])->name('reprocessar');
        Route::get('/criar',                     [GestaoContestController::class, 'criarProximo'])->name('criar');
        Route::post('/store',                    [GestaoContestController::class, 'storeProximo'])->name('store');
        Route::post('/toggle-auto',              [GestaoContestController::class, 'toggleAutoAtivar'])->name('toggle-auto');
    });
 
    // Tabelas — CRUD de tabelas de configuração
    Route::prefix('tabelas')->name('tabelas.')->group(function () {
        Route::get('/',                          [TabelaController::class, 'index'])->name('index');
 
        // Records — rotas específicas ANTES do curinga /{tabela}
        Route::prefix('records')->name('records.')->group(function () {
            Route::get('/',            [RecordsController::class, 'index'])->name('index');
            Route::get('/modelo',      [RecordsController::class, 'modelo'])->name('modelo');
            Route::get('/{id}/edit',   [RecordsController::class, 'edit'])->name('edit');
            Route::put('/{id}',        [RecordsController::class, 'update'])->name('update');
            Route::post('/importar',   [RecordsController::class, 'importar'])->name('importar');
            Route::post('/limpar-ant', [RecordsController::class, 'limparAnt'])->name('limpar-ant');
        });
 
        Route::get('/{tabela}',                  [TabelaController::class, 'show'])->name('show');
        Route::get('/{tabela}/novo',             [TabelaController::class, 'create'])->name('create');
        Route::post('/{tabela}',                 [TabelaController::class, 'store'])->name('store');
        Route::get('/{tabela}/{id}/editar',      [TabelaController::class, 'edit'])->name('edit');
        Route::put('/{tabela}/{id}',             [TabelaController::class, 'update'])->name('update');
        Route::delete('/{tabela}/{id}',          [TabelaController::class, 'destroy'])->name('destroy');
    });
 
    // Processamento
    Route::prefix('processamento')->name('processamento.')->group(function () {
 
        // Endpoint compartilhado: confirma conclusão e grava tempo real (chamado pelo JS)
        Route::post('/concluir-etapa', [\App\Http\Controllers\Processamento\EtapaController::class, 'concluir'])
            ->name('concluir-etapa');
 
        // A — Importar LOGs
        Route::get('/importar',             [ImportacaoController::class, 'index'])->name('importar');
        Route::get('/importar/confirmar',   [ImportacaoController::class, 'confirmar'])->name('importar.confirmar');
        Route::post('/importar/executar',   [ImportacaoController::class, 'executar'])->name('importar.executar');
        Route::get('/importar/progresso',   [ImportacaoController::class, 'progresso'])->name('importar.progresso');
        Route::get('/importar/status',      [ImportacaoController::class, 'status'])->name('importar.status');
        Route::post('/importar/processar',  [ImportacaoController::class, 'processar'])->name('importar.processar');
 
        // 1 — Juntar LOGs → qsos_result
        Route::get('/juntar',              [ValidacaoController::class, 'indexJuntar'])->name('juntar');
        Route::get('/juntar/confirmar',    [ValidacaoController::class, 'confirmarJuntar'])->name('juntar.confirmar');
        Route::post('/juntar/executar',    [ValidacaoController::class, 'executarJuntar'])->name('juntar.executar');
        Route::get('/juntar/progresso',    [ValidacaoController::class, 'progressoJuntar'])->name('juntar.progresso');
        Route::get('/juntar/status',       [ValidacaoController::class, 'statusJuntar'])->name('juntar.status');
        Route::post('/juntar/processar',   [ValidacaoController::class, 'processarJuntar'])->name('juntar.processar');
 
        // 2 — Validar QSOs
        Route::get('/validar-qsos',              [ValidacaoController::class, 'indexQsos'])->name('validar-qsos');
        Route::post('/validar-qsos',             [ValidacaoController::class, 'executarQsos'])->name('validar-qsos.executar');
        Route::get('/validar-qsos/progresso',    [ValidacaoController::class, 'progressoQsos'])->name('validar-qsos.progresso');
        Route::get('/validar-qsos/status',       [ValidacaoController::class, 'statusQsos'])->name('validar-qsos.status');
        Route::post('/validar-qsos/processar',   [ValidacaoController::class, 'processarQsos'])->name('validar-qsos.processar');
 
        // 3 — Validar Horas/Trocas
        Route::get('/validar-tempo',             [ValidacaoController::class, 'indexTempo'])->name('validar-tempo');
        Route::post('/validar-tempo',            [ValidacaoController::class, 'executarTempo'])->name('validar-tempo.executar');
        Route::get('/validar-tempo/progresso',   [ValidacaoController::class, 'progressoTempo'])->name('validar-tempo.progresso');
        Route::get('/validar-tempo/status',      [ValidacaoController::class, 'statusTempo'])->name('validar-tempo.status');
        Route::post('/validar-tempo/processar',  [ValidacaoController::class, 'processarTempo'])->name('validar-tempo.processar');
 
        // 4 — Claimed Score
        Route::get('/claimed-score',             [PontuacaoController::class, 'indexClaimed'])->name('claimed-score');
        Route::post('/claimed-score',            [PontuacaoController::class, 'executarClaimed'])->name('claimed-score.executar');
        Route::get('/claimed-score/progresso',   [PontuacaoController::class, 'progressoClaimed'])->name('claimed-score.progresso');
        Route::get('/claimed-score/status',      [PontuacaoController::class, 'statusClaimed'])->name('claimed-score.status');
        Route::post('/claimed-score/processar',  [PontuacaoController::class, 'processarClaimed'])->name('claimed-score.processar');
 
        // 5 — Validar Contatos
        Route::get('/validar-contatos',             [ValidacaoController::class, 'indexContatos'])->name('validar-contatos');
        Route::post('/validar-contatos',            [ValidacaoController::class, 'executarContatos'])->name('validar-contatos.executar');
        Route::get('/validar-contatos/progresso',   [ValidacaoController::class, 'progressoContatos'])->name('validar-contatos.progresso');
        Route::get('/validar-contatos/status',      [ValidacaoController::class, 'statusContatos'])->name('validar-contatos.status');
        Route::post('/validar-contatos/processar',  [ValidacaoController::class, 'processarContatos'])->name('validar-contatos.processar');
 
        // 6 — Sem LOGs / DUPs
        Route::get('/sem-logs',             [ValidacaoController::class, 'indexSemLogs'])->name('sem-logs');
        Route::post('/sem-logs',            [ValidacaoController::class, 'executarSemLogs'])->name('sem-logs.executar');
        Route::get('/sem-logs/progresso',   [ValidacaoController::class, 'progressoSemLogs'])->name('sem-logs.progresso');
        Route::get('/sem-logs/status',      [ValidacaoController::class, 'statusSemLogs'])->name('sem-logs.status');
        Route::post('/sem-logs/processar',  [ValidacaoController::class, 'processarSemLogs'])->name('sem-logs.processar');
 
        // 7 — Calcular Pontos QSO
        Route::get('/pontuar',             [PontuacaoController::class, 'indexPontos'])->name('pontuar');
        Route::post('/pontuar',            [PontuacaoController::class, 'executarPontos'])->name('pontuar.executar');
        Route::get('/pontuar/progresso',   [PontuacaoController::class, 'progressoPontos'])->name('pontuar.progresso');
        Route::get('/pontuar/status',      [PontuacaoController::class, 'statusPontos'])->name('pontuar.status');
        Route::post('/pontuar/processar',  [PontuacaoController::class, 'processarPontos'])->name('pontuar.processar');
 
        // 8 — Multiplicadores
        Route::get('/multiplicadores',  [PontuacaoController::class, 'indexMulti'])->name('multiplicadores');
        Route::post('/multiplicadores', [PontuacaoController::class, 'executarMulti'])->name('multiplicadores.executar');
 
        // 9 — Final Score / Resultado por Categoria
        Route::get('/final-score',             [ResultadoController::class, 'indexFinal'])->name('final-score');
        Route::post('/final-score',            [ResultadoController::class, 'executarFinal'])->name('final-score.executar');
        Route::get('/final-score/progresso',   [ResultadoController::class, 'progressoFinal'])->name('final-score.progresso');
        Route::get('/final-score/status',      [ResultadoController::class, 'statusFinal'])->name('final-score.status');
        Route::post('/final-score/processar',  [ResultadoController::class, 'processarFinal'])->name('final-score.processar');
 
        // 10 — Resultado Final
        Route::get('/resultado',             [ResultadoController::class, 'indexResultado'])->name('resultado');
        Route::post('/resultado',            [ResultadoController::class, 'executarResultado'])->name('resultado.executar');
        Route::get('/resultado/progresso',   [ResultadoController::class, 'progressoResultado'])->name('resultado.progresso');
        Route::get('/resultado/status',      [ResultadoController::class, 'statusResultado'])->name('resultado.status');
        Route::post('/resultado/processar',  [ResultadoController::class, 'processarResultado'])->name('resultado.processar');
 
        // 11 — Records
        // Etapa 11 — Encerrar Contest
        Route::get('/encerrar',            [ResultadoController::class, 'encerrar'])->name('encerrar.index');
        Route::get('/encerrar/progresso',  [ResultadoController::class, 'progressoEncerrar'])->name('encerrar.progresso');
        Route::post('/encerrar/processar', [ResultadoController::class, 'processarEncerrar'])->name('encerrar.processar');
 
        Route::get('/records',             [ResultadoController::class, 'indexRecords'])->name('records');
        Route::post('/records',            [ResultadoController::class, 'executarRecords'])->name('records.executar');
        Route::get('/records/progresso',   [ResultadoController::class, 'progressoRecords'])->name('records.progresso');
        Route::get('/records/status',      [ResultadoController::class, 'statusRecords'])->name('records.status');
        Route::post('/records/processar',  [ResultadoController::class, 'processarRecords'])->name('records.processar');
    });
 
    // Relatórios
    Route::prefix('relatorios')->name('relatorios.')->group(function () {
        Route::get('/invalidos',             [RelatorioController::class, 'invalidos'])->name('invalidos');
        Route::get('/contatos-invalidados',  [RelatorioController::class, 'contatosInvalidados'])->name('contatos-invalidados');
        Route::get('/duplicados',            [RelatorioController::class, 'duplicados'])->name('duplicados');
        Route::get('/operadores-clubes',     [RelatorioController::class, 'operadoresClubes'])->name('operadores-clubes');
        Route::match(['get','post'], '/emails', [RelatorioController::class, 'emails'])->name('emails');
        Route::get('/recebidos-nao-validados', [RelatorioController::class, 'recebidosNaoValidados'])->name('recebidos-nao-validados');
        Route::get('/resultado',                 [RelatorioController::class, 'resultado'])->name('resultado');
        Route::get('/call-rcvd-sem-log',        [RelatorioController::class, 'callRcvdSemLog'])->name('call-rcvd-sem-log');
        Route::get('/exchange-invalidos',        [RelatorioController::class, 'exchangeInvalidos'])->name('exchange-invalidos');
        Route::get('/relatorio-final',           [RelatorioController::class, 'relatorioFinal'])->name('relatorio-final');
        Route::get('/records',                   [RelatorioController::class, 'records'])->name('records');
        // dxcc e log-por-call removidos — scripts legacy descartados
    });
});