<?php
namespace App\Http\Controllers\Dashboard;
 
use App\Http\Controllers\Controller;
use App\Models\ContestDate;
use App\Models\ContestEtapa;
use App\Models\LogCabecalho;
use App\Models\LogQso;
use App\Models\QsoResult;
use Illuminate\Support\Facades\DB;
 
class DashboardController extends Controller
{
    public function index()
    {
        $contest = ContestDate::ativo();
        $etapas  = ContestEtapa::mapaStatus();
 
        $cid = $contest?->id;

        $totalLogs       = $cid ? LogCabecalho::where('contest_id',$cid)->count() : LogCabecalho::count();
        $totalQsosBrutos = $cid ? LogQso::where('contest_id',$cid)->count()        : LogQso::count();
        $totalResult     = $cid ? QsoResult::where('contest_id',$cid)->count()     : QsoResult::count();

        $qv = fn() => $cid ? QsoResult::where('contest_id',$cid) : QsoResult::query();
        $totalValidos      = ($etapas['2'] ?? '') === 'concluida' ? $qv()->where('valid_qso',1)->count() : null;
        $totalInvalidos    = ($etapas['2'] ?? '') === 'concluida' ? $qv()->where('valid_qso',0)->count() : null;
        $totalValidosTempo = ($etapas['3'] ?? '') === 'concluida'
            ? $qv()->where('valid_qso',1)->where('valid_tempqso',1)->where('valid_trocaband','!=',0)->count() : null;
        $totalConfirmados  = ($etapas['5'] ?? '') === 'concluida' ? $qv()->where('confirmado',1)->count() : null;
 
        // Dados de tempo para painel de duração
        $todasEtapas    = ContestEtapa::todasComTempo();
        $totalSegundos  = ContestEtapa::totalSegundos();
 
        $stats = [
            'total_logs'          => $totalLogs,
            'total_qsos_brutos'   => $totalQsosBrutos,
            'total_result'        => $totalResult,
            'total_validos'       => $totalValidos,
            'total_invalidos'     => $totalInvalidos,
            'total_validos_tempo' => $totalValidosTempo,
            'total_confirmados'   => $totalConfirmados,
        ];
 
        return view('dashboard.index', compact(
            'contest','stats','etapas','todasEtapas','totalSegundos'
        ));
    }
 
    public function resetar()
    {
        return view('dashboard.resetar');
    }
 
    public function confirmarReset(\Illuminate\Http\Request $request)
    {
        $request->validate(
            ['confirmacao' => ['required','in:RESETAR']],
            ['confirmacao.in' => 'Digite exatamente RESETAR (maiusculas) para confirmar.']
        );
 
        // Reseta contest_etapas — tudo pendente
        $contestAtivo = ContestDate::ativo();
        $qReset = DB::table('contest_etapas');
        if ($contestAtivo) $qReset->where('contest_id', $contestAtivo->id);
        $qReset->update([
            'status'            => 'pendente',
            'executada_em'      => null,
            'executada_por'     => null,
            'total_processados' => 0,
            'total_validos'     => 0,
            'total_invalidos'   => 0,
            'tempo_gasto'       => null,
            'segundos_gastos'   => 0,
        ]);
 
        // Limpa TODAS as sessões de status — sem isso o menu fica
        // travado com "Processando..." mesmo após o reset
        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();
 
        activity()->causedBy(auth()->user())
                  ->log('Dashboard: processamento resetado — etapas e sessoes limpas.');
 
        return redirect()->route('dashboard')
                         ->with('sucesso', 'Processamento resetado. Todas as etapas estão pendentes. Inicie pela Etapa A.');
    }
}