@extends('layouts.app')
@section('contenido')
@php
$faseCalculo = [
'grupos' => 'grupos',
'dieciseisavos' => 'dieciseisavos',
'octavos' => 'octavos',
'cuartos' => 'cuartos',
'semifinales' => 'semifinales',
];
$textoBotonCalculo = [
'grupos' => 'Calcular dieciseisavos',
'dieciseisavos' => 'Calcular octavos',
'octavos' => 'Calcular cuartos',
'cuartos' => 'Calcular semifinales',
'semifinales' => 'Calcular final y tercer puesto',
];
/*
|--------------------------------------------------------------------------
| Mapa de códigos FIFA / abreviaturas a código de bandera ISO
|--------------------------------------------------------------------------
| Si tienes imágenes locales, guárdalas en public/img/flags/
| Ejemplo:
| public/img/flags/mex.png
| public/img/flags/arg.png
| public/img/flags/bra.png
*/
$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',
'DZ' => 'dz',
'AUS' => 'au',
'AUT' => 'at',
'DEN' => 'dk',
'NOR' => 'no',
'SWE' => 'se',
'POL' => 'pl',
'SEN' => 'sn',
'EGY' => 'eg',
'TUN' => 'tn',
'IRN' => 'ir',
'IRQ' => 'iq',
'KSA' => 'sa',
'SAU' => 'sa',
'JOR' => 'jo',
'UZB' => 'uz',
'NZL' => 'nz',
'PAN' => 'pa',
'CRC' => 'cr',
'CUR' => 'cw',
'CUW' => 'cw',
'CPV' => 'cv',
'COD' => 'cd',
'DRC' => 'cd',
'QAT' => 'qa',
'UAE' => 'ae',
'CHI' => 'cl',
'CHL' => 'cl',
'PER' => 'pe',
'BOL' => 'bo',
'VEN' => 've',
'UKR' => 'ua',
'TUR' => 'tr',
'GRE' => 'gr',
'ROU' => 'ro',
'SRB' => 'rs',
'CYP' => 'cy',
'HAI' => 'ht',
'JAM' => 'jm',
];
$isoPorNombre = [
'méxico' => 'mx',
'mexico' => 'mx',
'sudáfrica' => 'za',
'sudafrica' => 'za',
'corea del sur' => 'kr',
'república checa' => 'cz',
'republica checa' => 'cz',
'estados unidos' => 'us',
'paraguay' => 'py',
'canadá' => 'ca',
'canada' => 'ca',
'bosnia y herzegovina' => 'ba',
'portugal' => 'pt',
'suiza' => 'ch',
'ecuador' => 'ec',
'alemania' => 'de',
'costa de marfil' => 'ci',
'países bajos' => 'nl',
'paises bajos' => 'nl',
'brasil' => 'br',
'marruecos' => 'ma',
'francia' => 'fr',
'argentina' => 'ar',
'croacia' => 'hr',
'inglaterra' => 'gb-eng',
'españa' => 'es',
'espana' => 'es',
'italia' => 'it',
'bélgica' => 'be',
'belgica' => 'be',
'uruguay' => 'uy',
'colombia' => 'co',
'japón' => 'jp',
'japon' => 'jp',
'ghana' => 'gh',
'argelia' => 'dz',
'australia' => 'au',
'austria' => 'at',
'dinamarca' => 'dk',
'noruega' => 'no',
'suecia' => 'se',
'polonia' => 'pl',
'senegal' => 'sn',
'egipto' => 'eg',
'túnez' => 'tn',
'tunez' => 'tn',
'irán' => 'ir',
'iran' => 'ir',
'irak' => 'iq',
'arabia saudita' => 'sa',
'jordania' => 'jo',
'uzbekistán' => 'uz',
'uzbekistan' => 'uz',
'nueva zelanda' => 'nz',
'panamá' => 'pa',
'panama' => 'pa',
'costa rica' => 'cr',
'curazao' => 'cw',
'cabo verde' => 'cv',
'rd congo' => 'cd',
'república democrática del congo' => 'cd',
'republica democratica del congo' => 'cd',
];
$normalizarTexto = function ($texto) {
$texto = mb_strtolower(trim((string) $texto), 'UTF-8');
$buscar = ['á','é','í','ó','ú','ñ','ü'];
$reemplazar = ['a','e','i','o','u','n','u'];
return str_replace($buscar, $reemplazar, $texto);
};
$codigoEquipo = function ($equipo, $origen = null) {
if ($equipo) {
return strtoupper($equipo->codigo ?? mb_substr($equipo->nombre ?? 'EQ', 0, 3));
}
return strtoupper($origen ?: 'PEND');
};
$nombreEquipo = function ($equipo, $origen = null) {
if ($equipo) {
return $equipo->nombre ?? $equipo->codigo ?? 'Equipo';
}
return $origen ?: 'Pendiente';
};
$banderaEquipo = function ($equipo) use ($codigoIsoBandera, $isoPorNombre, $normalizarTexto) {
if (!$equipo) {
return null;
}
$bandera = $equipo->bandera ?? null;
$codigo = strtoupper(trim((string) ($equipo->codigo ?? '')));
$nombre = trim((string) ($equipo->nombre ?? ''));
/*
|--------------------------------------------------------------------------
| 1. Si el modelo ya trae URL o ruta en bandera
|--------------------------------------------------------------------------
*/
if ($bandera) {
if (str_starts_with($bandera, 'http')) {
return $bandera;
}
$posiblesRutas = [
$bandera,
'storage/' . $bandera,
'img/flags/' . $bandera,
'img/banderas/' . $bandera,
];
foreach ($posiblesRutas as $ruta) {
if (file_exists(public_path($ruta))) {
return asset($ruta);
}
}
}
/*
|--------------------------------------------------------------------------
| 2. Buscar bandera local por código FIFA
|--------------------------------------------------------------------------
*/
$candidatos = [];
if ($codigo) {
$candidatos[] = strtolower($codigo);
$candidatos[] = strtoupper($codigo);
if (isset($codigoIsoBandera[$codigo])) {
$candidatos[] = $codigoIsoBandera[$codigo];
}
}
/*
|--------------------------------------------------------------------------
| 3. Buscar bandera local por nombre normalizado
|--------------------------------------------------------------------------
*/
if ($nombre) {
$nombreNormalizado = $normalizarTexto($nombre);
if (isset($isoPorNombre[$nombreNormalizado])) {
$candidatos[] = $isoPorNombre[$nombreNormalizado];
}
}
$extensiones = ['png', 'jpg', 'jpeg', 'webp', 'svg'];
foreach (array_unique($candidatos) as $base) {
foreach ($extensiones as $ext) {
$rutas = [
"img/flags/{$base}.{$ext}",
"img/banderas/{$base}.{$ext}",
"flags/{$base}.{$ext}",
"banderas/{$base}.{$ext}",
];
foreach ($rutas as $ruta) {
if (file_exists(public_path($ruta))) {
return asset($ruta);
}
}
}
}
/*
|--------------------------------------------------------------------------
| 4. Si no hay imagen local, usar bandera online
|--------------------------------------------------------------------------
*/
$iso = null;
if ($codigo && isset($codigoIsoBandera[$codigo])) {
$iso = $codigoIsoBandera[$codigo];
}
if (!$iso && $nombre) {
$nombreNormalizado = $normalizarTexto($nombre);
$iso = $isoPorNombre[$nombreNormalizado] ?? null;
}
if ($iso) {
return "https://flagcdn.com/w80/{$iso}.png";
}
return null;
};
$renderBandera = function ($equipo, $origen = null) use ($banderaEquipo, $codigoEquipo) {
$src = $banderaEquipo($equipo);
$codigo = $codigoEquipo($equipo, $origen);
if ($src) {
return '
' . e($codigo) . '
';
}
return '' . e($codigo) . '';
};
@endphp
| Pos. | Equipo | PTS | DG | GF |
|---|---|---|---|---|
| {{ $f['posicion'] ?? '-' }} |
{!! $renderBandera($eq) !!}
{{ $eq->nombre ?? 'Pendiente' }}
|
{{ $f['pts'] ?? 0 }} | {{ $f['dg'] ?? 0 }} | {{ $f['gf'] ?? 0 }} |
| Orden | Grupo | Equipo | PTS | DG | GF | Estado |
|---|---|---|---|---|---|---|
| {{ $loop->iteration }} | {{ $fila['grupo'] ?? $grupo }} |
{!! $renderBandera($eq) !!}
{{ $eq->nombre ?? 'Pendiente' }}
|
{{ $fila['pts'] ?? 0 }} | {{ $fila['dg'] ?? 0 }} | {{ $fila['gf'] ?? 0 }} | @if($loop->iteration <= 8) Clasifica @else No clasifica @endif |