@extends('layouts.app') @section('contenido') @php $tablaOficial = $tablaOficial ?? []; $mejoresTercerosOficiales = $mejoresTercerosOficiales ?? []; $gruposCompletos = $gruposCompletos ?? false; $dieciseisavosCompletos = $dieciseisavosCompletos ?? false; $octavosCompletos = $octavosCompletos ?? false; $cuartosCompletos = $cuartosCompletos ?? false; $semifinalesCompletas = $semifinalesCompletas ?? false; $codigoIsoBandera = [ 'MEX' => 'mx', 'RSA' => 'za', 'KOR' => 'kr', 'CZE' => 'cz', 'USA' => 'us', 'PAR' => 'py', 'CAN' => 'ca', 'BIH' => 'ba', 'POR' => 'pt', 'SUI' => 'ch', 'ECU' => 'ec', 'GER' => 'de', 'CIV' => 'ci', 'NED' => 'nl', 'BRA' => 'br', 'MAR' => 'ma', 'FRA' => 'fr', 'ARG' => 'ar', 'CRO' => 'hr', 'ENG' => 'gb-eng', 'ESP' => 'es', 'ITA' => 'it', 'BEL' => 'be', 'URU' => 'uy', 'COL' => 'co', 'JPN' => 'jp', 'GHA' => 'gh', 'ALG' => 'dz', 'AUS' => 'au', 'AUT' => 'at', 'DEN' => 'dk', 'NOR' => 'no', 'SEN' => 'sn', 'EGY' => 'eg', 'JOR' => 'jo', 'UZB' => 'uz', 'NZL' => 'nz', 'CPV' => 'cv', 'COD' => 'cd', 'DRC' => 'cd', 'KSA' => 'sa', 'SAU' => 'sa', 'CUR' => 'cw', 'CUW' => 'cw', 'HAI' => 'ht', 'IRN' => 'ir', 'IRQ' => 'iq', 'SCO' => 'gb-sct', 'WAL' => 'gb-wls', 'QAT' => 'qa', 'CRC' => 'cr', 'PAN' => 'pa', 'TUN' => 'tn', 'POL' => 'pl', 'SWE' => 'se', ]; $isoPorNombre = [ 'México' => 'mx', 'Sudáfrica' => 'za', 'Corea del Sur' => 'kr', 'República Checa' => 'cz', 'Estados Unidos' => 'us', 'Paraguay' => 'py', 'Canadá' => 'ca', 'Bosnia y Herzegovina' => 'ba', 'Portugal' => 'pt', 'Suiza' => 'ch', 'Ecuador' => 'ec', 'Alemania' => 'de', 'Costa de Marfil' => 'ci', 'Países Bajos' => 'nl', 'Brasil' => 'br', 'Marruecos' => 'ma', 'Francia' => 'fr', 'Argentina' => 'ar', 'Croacia' => 'hr', 'Inglaterra' => 'gb-eng', 'España' => 'es', 'Italia' => 'it', 'Bélgica' => 'be', 'Uruguay' => 'uy', 'Colombia' => 'co', 'Japón' => 'jp', 'Ghana' => 'gh', 'Argelia' => 'dz', 'Australia' => 'au', 'Austria' => 'at', 'Noruega' => 'no', 'Senegal' => 'sn', 'Egipto' => 'eg', 'Jordania' => 'jo', 'Uzbekistán' => 'uz', 'Nueva Zelanda' => 'nz', 'Cabo Verde' => 'cv', 'RD Congo' => 'cd', 'Arabia Saudita' => 'sa', 'Curazao' => 'cw', 'Haití' => 'ht', 'Irán' => 'ir', 'Irak' => 'iq', 'Escocia' => 'gb-sct', 'Gales' => 'gb-wls', 'Qatar' => 'qa', 'Costa Rica' => 'cr', 'Panamá' => 'pa', 'Túnez' => 'tn', 'Polonia' => 'pl', 'Suecia' => 'se', 'Dinamarca' => 'dk', ]; $banderaEquipo = function ($equipo) use ($codigoIsoBandera, $isoPorNombre) { if (! $equipo) { return null; } $bandera = $equipo->bandera_url ?? $equipo->bandera ?? null; if ($bandera) { if (str_starts_with($bandera, 'http')) { return $bandera; } $rutas = [ $bandera, 'storage/' . $bandera, 'img/flags/' . $bandera, 'img/banderas/' . $bandera, 'flags/' . $bandera, 'banderas/' . $bandera, ]; foreach ($rutas as $ruta) { if (file_exists(public_path($ruta))) { return asset($ruta); } } } $codigo = strtoupper($equipo->codigo ?? ''); if ($codigo && isset($codigoIsoBandera[$codigo])) { return 'https://flagcdn.com/w80/' . $codigoIsoBandera[$codigo] . '.png'; } $nombre = $equipo->nombre ?? null; if ($nombre && isset($isoPorNombre[$nombre])) { return 'https://flagcdn.com/w80/' . $isoPorNombre[$nombre] . '.png'; } return null; }; $renderEquipo = function ($equipo, $origen = null) use ($banderaEquipo) { $nombre = $equipo?->nombre ?? $origen ?? 'Por definir'; $codigo = strtoupper($equipo?->codigo ?? mb_substr($nombre, 0, 3)); $bandera = $banderaEquipo($equipo); if ($bandera) { return ' ' . e($codigo) . ' ' . e($nombre) . ' '; } return ' ' . e($codigo) . ' ' . e($nombre) . ' '; }; @endphp

Partidos y resultados oficiales

El administrador registra solamente resultados oficiales. La fase de grupos ya viene designada por calendario. Cuando todos los partidos de una fase quedan confirmados, el sistema calcula automáticamente la siguiente fase oficial.

@if(session('success'))
{{ session('success') }}
@endif @if($errors->any())
{{ $errors->first() }}
@endif
Total partidos

{{ $totales['partidos'] ?? 0 }}

Confirmados

{{ $totales['confirmados'] ?? 0 }}

Pendientes

{{ $totales['pendientes'] ?? 0 }}

Pronóstico abierto

{{ $totales['abiertos'] ?? 0 }}

Pronóstico cerrado

{{ $totales['cerrados'] ?? 0 }}

Estado del cálculo oficial por fases

Fase de grupos {{ $gruposCompletos ? 'Completa: 16avos calculados' : 'Pendiente: faltan resultados M1-M72' }}
Dieciseisavos {{ $dieciseisavosCompletos ? 'Completa: octavos calculados' : 'Pendiente' }}
Octavos {{ $octavosCompletos ? 'Completa: cuartos calculados' : 'Pendiente' }}
Cuartos {{ $cuartosCompletos ? 'Completa: semifinales calculadas' : 'Pendiente' }}
Semifinales {{ $semifinalesCompletas ? 'Completa: final y tercer puesto calculados' : 'Pendiente' }}
@csrf
Use este botón si editó resultados anteriores o si desea forzar nuevamente el cálculo de una fase oficial.
Limpiar
@foreach($fases as $fase) @endforeach

Todos los partidos

{{ $partidos->count() }} partidos mostrados
@if($partidos->count())
@foreach($partidos as $p) @include('admin.partials.partido-card', [ 'p' => $p, 'equipos' => $equipos, 'renderEquipo' => $renderEquipo ]) @endforeach
@else
No se encontraron partidos con los filtros aplicados.
@endif
@foreach($fases as $fase) @php $partidosFase = $partidos->filter(fn($p) => $p->fase?->codigo === $fase->codigo); @endphp

{{ $fase->nombre }}

{{ $partidosFase->count() }} partidos
@if($partidosFase->count())
@foreach($partidosFase as $p) @include('admin.partials.partido-card', [ 'p' => $p, 'equipos' => $equipos, 'renderEquipo' => $renderEquipo ]) @endforeach
@else
No hay partidos para esta fase con los filtros aplicados.
@endif
@endforeach @if(count($tablaOficial))

Tablas oficiales de grupos

Calculadas con los resultados oficiales registrados por el administrador. Reglamento: victoria 3 pts, empate 1 pt, derrota 0 pts.
@if(!$gruposCompletos) Aún faltan resultados de grupos @else Grupos completos @endif
@foreach($tablaOficial as $grupo => $filas)
Grupo {{ $grupo }}
@foreach($filas as $f) @endforeach
Pos Equipo PJ PTS DG GF GC
{{ $f['posicion'] }} {!! $renderEquipo($f['equipo']) !!} {{ $f['pj'] }} {{ $f['pts'] }} {{ $f['dg'] }} {{ $f['gf'] }} {{ $f['gc'] }}
1° y 2° clasifican directo. El 3° entra al ranking de mejores terceros.
@endforeach
@if(count($mejoresTercerosOficiales))

Mejores terceros oficiales

@foreach($mejoresTercerosOficiales as $fila) @endforeach
Orden Grupo Equipo PTS DG GF Estado
{{ $loop->iteration }} {{ $fila['grupo'] }} {!! $renderEquipo($fila['equipo']) !!} {{ $fila['pts'] }} {{ $fila['dg'] }} {{ $fila['gf'] }} @if($loop->iteration <= 8) Clasifica @else No clasifica @endif
@endif
@endif
@endsection