@extends('layouts.app') @section('titulo', 'Mis pronósticos') @section('contenido') @php $isoFlags = [ 'MEX' => 'mx', 'RSA' => 'za', 'KOR' => 'kr', 'CZE' => 'cz', 'CAN' => 'ca', 'BIH' => 'ba', 'USA' => 'us', 'PAR' => 'py', 'QAT' => 'qa', 'SUI' => 'ch', 'BRA' => 'br', 'MAR' => 'ma', 'HAI' => 'ht', 'SCO' => 'gb-sct', 'AUS' => 'au', 'TUR' => 'tr', 'GER' => 'de', 'CUW' => 'cw', 'FRA' => 'fr', 'SEN' => 'sn', 'ENG' => 'gb-eng', 'CRO' => 'hr', 'ARG' => 'ar', 'ALG' => 'dz', 'ESP' => 'es', 'JPN' => 'jp', 'ITA' => 'it', 'COL' => 'co', 'POR' => 'pt', 'NOR' => 'no', 'URU' => 'uy', 'NGA' => 'ng', 'BEL' => 'be', 'EGY' => 'eg', 'NED' => 'nl', 'PAN' => 'pa', 'ECU' => 'ec', 'IRN' => 'ir', 'POL' => 'pl', 'GHA' => 'gh', 'DEN' => 'dk', 'CRC' => 'cr', 'AUT' => 'at', 'TUN' => 'tn', 'CHI' => 'cl', 'PER' => 'pe', 'NZL' => 'nz', 'KSA' => 'sa', 'UKR' => 'ua', 'WAL' => 'gb-wls', 'SWE' => 'se', 'CMR' => 'cm', 'MLI' => 'ml', 'CIV' => 'ci', 'VEN' => 've', 'BOL' => 'bo', 'ROU' => 'ro', 'HUN' => 'hu', 'SRB' => 'rs', 'SVK' => 'sk', 'GRE' => 'gr', 'JAM' => 'jm', 'HON' => 'hn', 'SLV' => 'sv', 'UAE' => 'ae', 'IRQ' => 'iq', 'JOR' => 'jo', 'UZB' => 'uz', 'CHN' => 'cn', 'CPV' => 'cv', 'IRL' => 'ie' ]; $equiposPorId = isset($equipos) ? $equipos->keyBy('id') : collect(); $tablasGrupos = $tablasGrupos ?? []; $activeFaseId = session('active_fase_id'); $banderaEquipo = function ($equipo) use ($isoFlags) { if (!$equipo) { return null; } if (!empty($equipo->bandera_url)) { return $equipo->bandera_url; } if (!empty($equipo->bandera)) { return $equipo->bandera; } $codigo = strtoupper($equipo->codigo ?? ''); $iso = $isoFlags[$codigo] ?? null; if (!$iso) { return null; } return "https://flagcdn.com/w40/{$iso}.png"; }; $esFaseGrupos = function ($fase) { return strtolower($fase->codigo ?? '') === 'grupos' || strtolower($fase->codigo ?? '') === 'grupo' || (int) $fase->orden === 1; }; $esFaseFinal = function ($fase) { $codigo = strtolower($fase->codigo ?? ''); $nombre = strtolower($fase->nombre ?? ''); return $codigo === 'final' || $nombre === 'final'; }; $esFaseTercerPuesto = function ($fase) { $codigo = strtolower($fase->codigo ?? ''); $nombre = strtolower($fase->nombre ?? ''); return str_contains($codigo, 'tercer') || str_contains($codigo, 'third') || str_contains($nombre, 'tercer') || str_contains($nombre, '3'); }; @endphp

Mis pronósticos Mundial 2026

Importante: cada fase se guarda de forma independiente. Usa Guardar esta fase antes de cambiar de pestaña. En semifinales, los ganadores pasan a la final y los perdedores al tercer puesto.
@csrf
@if(\Illuminate\Support\Facades\Route::has('pronosticos.imprimir')) Imprimir @endif @if(\Illuminate\Support\Facades\Route::has('pronosticos.enviar_final'))
@csrf
@endif
@if(\Illuminate\Support\Facades\Route::has('ranking.publico')) Ver ranking @endif
@foreach($fases as $fase) @php $activo = $activeFaseId ? ((int) $activeFaseId === (int) $fase->id) : $loop->first; @endphp
@csrf

{{ $fase->nombre }}

@if($fase->pronostico_abierto) Fase abierta @else Fase cerrada @endif @if($esFaseGrupos($fase)) Equipos FIFA definidos @else Equipos calculados por usuario @endif
@foreach($fase->partidos as $partido) @php $pronostico = $pronosticos[$partido->id] ?? null; $partidoAbierto = $partido->pronostico_abierto ?? $partido->abierto ?? true; $bloqueado = !$fase->pronostico_abierto || !$partidoAbierto || ($pronostico?->bloqueado ?? false); if ($esFaseGrupos($fase)) { $localObj = $partido->local; $visitanteObj = $partido->visitante; $localId = $partido->equipo_local_id; $visitanteId = $partido->equipo_visitante_id; $localNombre = $partido->local?->nombre ?? $partido->origen_local ?? 'Por definir'; $visitanteNombre = $partido->visitante?->nombre ?? $partido->origen_visitante ?? 'Por definir'; } else { $faseCalculadaParaUsuario = (bool) ($pronostico?->generado_automaticamente ?? false); if ($faseCalculadaParaUsuario) { $localObj = $pronostico?->local; $visitanteObj = $pronostico?->visitante; $localId = $pronostico?->equipo_local_id; $visitanteId = $pronostico?->equipo_visitante_id; $localNombre = $pronostico?->local?->nombre ?? 'Pendiente'; $visitanteNombre = $pronostico?->visitante?->nombre ?? 'Pendiente'; } else { $localObj = null; $visitanteObj = null; $localId = null; $visitanteId = null; $localNombre = 'Pendiente'; $visitanteNombre = 'Pendiente'; } } $localFlag = $banderaEquipo($localObj); $visitanteFlag = $banderaEquipo($visitanteObj); $partidoListo = $localId && $visitanteId; @endphp
M{{ $partido->numero }} {{ $pronostico?->puntaje_obtenido ?? 0 }} pts
@if($localFlag) {{ $localNombre }} @endif {{ $localNombre }}
@if($visitanteFlag) {{ $visitanteNombre }} @endif {{ $visitanteNombre }}
@if($esFaseGrupos($fase))
Ganador automático según marcador. El empate es válido.
@else @if($partidoListo)
Si colocas empate, selecciona quién pasa.
@else
Primero calcula la fase anterior para cargar estos equipos.
@endif @endif
@endforeach
@if($esFaseGrupos($fase) && !empty($tablasGrupos))
Tabla de posiciones por grupo según tu pronóstico
@foreach($tablasGrupos as $grupo => $tabla)
Grupo {{ $grupo }}
@foreach($tabla as $i => $fila) @php $equipoTabla = $equiposPorId[$fila['equipo_id']] ?? null; $flagTabla = $banderaEquipo($equipoTabla); @endphp @endforeach
# Equipo Pts DG GF
{{ $i + 1 }}
@if($flagTabla) {{ $equipoTabla?->nombre }} @endif {{ $equipoTabla?->nombre ?? 'Equipo' }}
{{ $fila['pts'] ?? 0 }} {{ $fila['dg'] ?? 0 }} {{ $fila['gf'] ?? 0 }}
Verde: 1.º y 2.º. Amarillo: posible mejor tercero.
@endforeach
@endif @if($fase->pronostico_abierto)
@if( !$esFaseFinal($fase) && !$esFaseTercerPuesto($fase) && \Illuminate\Support\Facades\Route::has('pronosticos.calcular_fase') ) @endif @if(\Illuminate\Support\Facades\Route::has('pronosticos.borrar_fase')) @endif
@endif
@endforeach
@endsection