<?php
if (!isset($conn) || !($conn instanceof mysqli)) {
    include 'concha.php';
}

if (!isset($conn) || !($conn instanceof mysqli)) {
    echo '<article style="margin-bottom:20px;"><div class="base-box2"><div class="widget-head"><h3 class="widget-title"><span>PARTIDO</span></h3></div><div style="padding:15px;">No se encontró la conexión.</div></div></article>';
    return;
}

$conn->set_charset('utf8mb4');
date_default_timezone_set('America/Argentina/Buenos_Aires');

$isAjax = isset($_GET['ajax']) ? 1 : 0;

function h($txt)
{
    return htmlspecialchars((string)$txt, ENT_QUOTES, 'UTF-8');
}

function tablaExiste($conn, $tabla)
{
    $tabla = $conn->real_escape_string($tabla);
    $sql = "SHOW TABLES LIKE '{$tabla}'";
    $res = $conn->query($sql);
    return ($res && $res->num_rows > 0);
}

function svgPelota()
{
    return '<svg viewBox="0 0 24 24" width="14" height="14" aria-hidden="true" style="vertical-align:-2px;"><circle cx="12" cy="12" r="10" fill="#111"/><polygon points="12,5.4 8.6,7.9 9.9,11.8 14.1,11.8 15.4,7.9" fill="#fff"/><polygon points="8.6,7.9 5.4,10.2 6.7,14 9.9,11.8" fill="#fff"/><polygon points="15.4,7.9 18.6,10.2 17.3,14 14.1,11.8" fill="#fff"/><polygon points="6.7,14 9.2,17.4 12,15.5 9.9,11.8" fill="#fff"/><polygon points="17.3,14 14.8,17.4 12,15.5 14.1,11.8" fill="#fff"/></svg>';
}

function svgAmarilla()
{
    return '<svg viewBox="0 0 24 24" width="14" height="14" aria-hidden="true" style="vertical-align:-2px;"><rect x="6" y="3" width="12" height="18" fill="#FFD400" stroke="#C9A300" stroke-width="1.2"/></svg>';
}

function svgRoja()
{
    return '<svg viewBox="0 0 24 24" width="14" height="14" aria-hidden="true" style="vertical-align:-2px;"><rect x="6" y="3" width="12" height="18" fill="#E11D2E" stroke="#A50E1A" stroke-width="1.2"/></svg>';
}

function obtenerPartidoSideBar($conn)
{
    $ahora = date('Y-m-d H:i:s');

    $baseSelect = "SELECT
                        p.*,
                        el.nombre AS equipo_local_nombre,
                        el.nombre_corto AS equipo_local_corto,
                        el.logo AS equipo_local_logo,
                        ev.nombre AS equipo_visitante_nombre,
                        ev.nombre_corto AS equipo_visitante_corto,
                        ev.logo AS equipo_visitante_logo,
                        es.nombre AS estadio_nombre,
                        es.localidad AS estadio_localidad,
                        es.provincia AS estadio_provincia
                   FROM fut_partidos p
                   INNER JOIN fut_equipos el ON el.id = p.equipo_local_id
                   INNER JOIN fut_equipos ev ON ev.id = p.equipo_visitante_id
                   INNER JOIN fut_estadios es ON es.id = p.estadio_id
                   WHERE p.publicado = 1";

    $sqlLive = $baseSelect . " AND p.estado IN ('primer_tiempo','entretiempo','segundo_tiempo')
                               ORDER BY p.fecha_hora_partido DESC, p.id DESC
                               LIMIT 1";
    $resLive = $conn->query($sqlLive);
    if ($resLive && $resLive->num_rows > 0) {
        $row = $resLive->fetch_assoc();
        $row['_modo_widget'] = 'live';
        return $row;
    }

    $sqlNext = $baseSelect . " AND p.fecha_hora_partido >= '{$ahora}'
                               ORDER BY p.fecha_hora_partido ASC, p.id ASC
                               LIMIT 1";
    $resNext = $conn->query($sqlNext);
    $next = ($resNext && $resNext->num_rows > 0) ? $resNext->fetch_assoc() : null;

    $sqlLast = $baseSelect . " AND p.fecha_hora_partido < '{$ahora}'
                               ORDER BY p.fecha_hora_partido DESC, p.id DESC
                               LIMIT 1";
    $resLast = $conn->query($sqlLast);
    $last = ($resLast && $resLast->num_rows > 0) ? $resLast->fetch_assoc() : null;

    if ($next) {
        $tsNext = strtotime($next['fecha_hora_partido']);
        $tsNow = time();

        if ($tsNow >= ($tsNext - 3600)) {
            $next['_modo_widget'] = 'upcoming';
            return $next;
        }
    }

    if ($last) {
        $last['_modo_widget'] = 'last';
        return $last;
    }

    if ($next) {
        $next['_modo_widget'] = 'upcoming';
        return $next;
    }

    return null;
}

function obtenerEventosWidget($conn, $partidoId, $limite = 10)
{
    $partidoId = (int)$partidoId;
    $limite = (int)$limite;
    if ($limite <= 0) {
        $limite = 10;
    }

    $items = array();

    $sql = "SELECT
                e.id,
                e.tipo_evento,
                e.minuto,
                e.tiempo_juego,
                e.detalle,
                e.equipo_id,
                eq.nombre AS equipo_nombre,
                j.nombre AS jugador_nombre,
                j.apellido AS jugador_apellido
            FROM fut_partidos_eventos e
            LEFT JOIN fut_equipos eq ON eq.id = e.equipo_id
            LEFT JOIN fut_jugadores j ON j.id = e.jugador_id
            WHERE e.partido_id = {$partidoId}
              AND e.tipo_evento IN ('gol','amarilla','roja')
            ORDER BY e.orden_evento DESC, e.id DESC
            LIMIT {$limite}";
    $res = $conn->query($sql);

    if ($res) {
        while ($row = $res->fetch_assoc()) {
            $items[] = $row;
        }
    }

    return array_reverse($items);
}

function calcularDatosTiempo($partido)
{
    $ahora = time();
    $estado = isset($partido['estado']) ? $partido['estado'] : 'programado';
    $modo = isset($partido['_modo_widget']) ? $partido['_modo_widget'] : 'last';
    $inicio = strtotime($partido['fecha_hora_partido']);

    $data = array(
        'label' => 'Programado',
        'minuto' => 0,
        'modo' => $modo
    );

    if ($modo === 'upcoming') {
        $resta = $inicio - $ahora;
        if ($resta > 0) {
            $horas = floor($resta / 3600);
            $mins = floor(($resta % 3600) / 60);
            $data['label'] = 'Comienza en ' . sprintf('%02d:%02d', $horas, $mins);
        } else {
            $data['label'] = 'Por comenzar';
        }
        return $data;
    }

    if ($estado === 'primer_tiempo' && (int)$partido['unix_inicio_1t'] > 0) {
        $elapsed = max(0, $ahora - (int)$partido['unix_inicio_1t']);
        $min = floor($elapsed / 60) + 1;
        if ($min > 45) {
            $min = 45;
        }
        $data['label'] = '1T ' . $min . "'";
        $data['minuto'] = (int)$min;
        return $data;
    }

    if ($estado === 'entretiempo') {
        $data['label'] = 'Entretiempo';
        $data['minuto'] = 45;
        return $data;
    }

    if ($estado === 'segundo_tiempo' && (int)$partido['unix_inicio_2t'] > 0) {
        $elapsed = max(0, $ahora - (int)$partido['unix_inicio_2t']);
        $min = 45 + floor($elapsed / 60) + 1;
        if ($min > 90) {
            $min = 90;
        }
        $data['label'] = '2T ' . $min . "'";
        $data['minuto'] = (int)$min;
        return $data;
    }

    if ($estado === 'finalizado') {
        $data['label'] = 'Finalizado';
        $data['minuto'] = 90;
        return $data;
    }

    if ($estado === 'suspendido') {
        $data['label'] = 'Suspendido';
        return $data;
    }

    if ($estado === 'postergado') {
        $data['label'] = 'Postergado';
        return $data;
    }

    if ($inicio > $ahora) {
        $resta = $inicio - $ahora;
        $horas = floor($resta / 3600);
        $mins = floor(($resta % 3600) / 60);
        $data['label'] = 'Comienza en ' . sprintf('%02d:%02d', $horas, $mins);
        return $data;
    }

    $data['label'] = 'Último partido';
    return $data;
}

function renderWidgetPartido($conn)
{
    if (!tablaExiste($conn, 'fut_partidos') || !tablaExiste($conn, 'fut_equipos') || !tablaExiste($conn, 'fut_estadios')) {
        return '
        <article style="margin-bottom:20px;">
            <div class="base-box2 partido-widget-box">
                <div class="widget-head">
                    <h3 class="widget-title"><span>PARTIDO</span></h3>
                </div>
                <div class="partido-widget-empty">Todavía no está creado el módulo de partidos.</div>
            </div>
        </article>';
    }

    $partido = obtenerPartidoSideBar($conn);

    if (!$partido) {
        return '
        <article style="margin-bottom:20px;">
            <div class="base-box2 partido-widget-box">
                <div class="widget-head">
                    <h3 class="widget-title"><span>PARTIDO</span></h3>
                </div>
                <div class="partido-widget-empty">No hay partidos cargados para mostrar.</div>
            </div>
        </article>';
    }

    $eventos = tablaExiste($conn, 'fut_partidos_eventos') ? obtenerEventosWidget($conn, (int)$partido['id'], 10) : array();
    $tiempo = calcularDatosTiempo($partido);

    $tsInicio = strtotime($partido['fecha_hora_partido']);
    $logoLocal = trim((string)$partido['equipo_local_logo']);
    $logoVisitante = trim((string)$partido['equipo_visitante_logo']);

    $mostrarScore = true;
    $scoreLocal = (int)$partido['marcador_local'];
    $scoreVisitante = (int)$partido['marcador_visitante'];

    if ($partido['_modo_widget'] === 'upcoming' && $partido['estado'] === 'programado' && $scoreLocal === 0 && $scoreVisitante === 0) {
        $scoreHtml = '<span class="partido-score-vs">VS</span>';
    } else {
        $scoreHtml = '<span class="partido-score-num">' . $scoreLocal . '</span><span class="partido-score-sep">-</span><span class="partido-score-num">' . $scoreVisitante . '</span>';
    }

    $eventosHtml = '';
    if (count($eventos) > 0) {
        $eventosHtml .= '<div class="partido-eventos">';
        foreach ($eventos as $ev) {
            $icono = '';
            if ($ev['tipo_evento'] === 'gol') {
                $icono = svgPelota();
            } elseif ($ev['tipo_evento'] === 'amarilla') {
                $icono = svgAmarilla();
            } elseif ($ev['tipo_evento'] === 'roja') {
                $icono = svgRoja();
            }

            $jugador = trim($ev['jugador_nombre'] . ' ' . $ev['jugador_apellido']);
            if ($jugador === '') {
                $jugador = trim((string)$ev['equipo_nombre']);
            }

            $extra = '';
            if ((int)$ev['minuto'] > 0) {
                $extra .= (int)$ev['minuto'] . "'";
            }
            if ($ev['detalle'] !== '') {
                $extra .= ($extra !== '' ? ' · ' : '') . $ev['detalle'];
            }

            $eventosHtml .= '<div class="partido-evento-item">';
            $eventosHtml .= '<span class="partido-evento-icon">' . $icono . '</span>';
            $eventosHtml .= '<span class="partido-evento-text">' . h($jugador);
            if ($extra !== '') {
                $eventosHtml .= ' <small>' . h($extra) . '</small>';
            }
            $eventosHtml .= '</span>';
            $eventosHtml .= '</div>';
        }
        $eventosHtml .= '</div>';
    }

    $linkPartido = 'partido.php?id=' . (int)$partido['id'];

    $html = '';
    $html .= '<article style="margin-bottom:20px;">';
    $html .= '<div class="base-box2 partido-widget-box">';
    $html .= '<div class="widget-head"><h3 class="widget-title"><span>PARTIDO</span></h3></div>';
    $html .= '<div class="partido-widget-wrap" 
                    data-modo="' . h($partido['_modo_widget']) . '"
                    data-estado="' . h($partido['estado']) . '"
                    data-fecha-hora="' . h($partido['fecha_hora_partido']) . '"
                    data-unix-inicio-1t="' . (int)$partido['unix_inicio_1t'] . '"
                    data-unix-inicio-2t="' . (int)$partido['unix_inicio_2t'] . '">';

    $html .= '<a href="' . h($linkPartido) . '" class="partido-widget-link">';
    $html .= '<div class="partido-widget-top">';
    $html .= '<div class="partido-widget-meta"><strong>Partido:</strong> ' . h($partido['equipo_local_nombre']) . ' vs ' . h($partido['equipo_visitante_nombre']) . '</div>';
    $html .= '<div class="partido-widget-meta"><strong>Fecha:</strong> ' . h(date('d/m/Y', $tsInicio)) . '</div>';
    $html .= '<div class="partido-widget-meta"><strong>Estadio:</strong> ' . h($partido['estadio_nombre']) . '</div>';
    $html .= '<div class="partido-widget-meta"><strong>Hora de inicio:</strong> ' . h(date('H:i', $tsInicio)) . ' hs</div>';
    $html .= '<div class="partido-widget-meta"><strong>Tiempo:</strong> <span class="partido-tiempo-live">' . h($tiempo['label']) . '</span></div>';
    $html .= '</div>';

    $html .= '<div class="partido-scoreboard">';
    $html .= '<div class="partido-team">';
    if ($logoLocal !== '') {
        $html .= '<img src="' . h($logoLocal) . '" alt="' . h($partido['equipo_local_nombre']) . '" class="partido-escudo">';
    } else {
        $html .= '<div class="partido-no-escudo">SIN ESCUDO</div>';
    }
    $html .= '<div class="partido-team-name">' . h($partido['equipo_local_corto'] !== '' ? $partido['equipo_local_corto'] : $partido['equipo_local_nombre']) . '</div>';
    $html .= '</div>';

    $html .= '<div class="partido-score-center">' . $scoreHtml . '</div>';

    $html .= '<div class="partido-team">';
    if ($logoVisitante !== '') {
        $html .= '<img src="' . h($logoVisitante) . '" alt="' . h($partido['equipo_visitante_nombre']) . '" class="partido-escudo">';
    } else {
        $html .= '<div class="partido-no-escudo">SIN ESCUDO</div>';
    }
    $html .= '<div class="partido-team-name">' . h($partido['equipo_visitante_corto'] !== '' ? $partido['equipo_visitante_corto'] : $partido['equipo_visitante_nombre']) . '</div>';
    $html .= '</div>';
    $html .= '</div>';
    $html .= '</a>';

    if ($eventosHtml !== '') {
        $html .= '<div class="partido-widget-bottom">';
        $html .= '<div class="partido-widget-subtitle">Goles y tarjetas</div>';
        $html .= $eventosHtml;
        $html .= '</div>';
    }

    $html .= '</div>';
    $html .= '</div>';
    $html .= '</article>';

    return $html;
}

$widgetHtml = renderWidgetPartido($conn);

if ($isAjax) {
    echo $widgetHtml;
    exit;
}
?>

<style>
.partido-widget-box{
    border:1px solid #e3e6ea;
    background:#fff;
    overflow:hidden;
}
.partido-widget-wrap{
    padding:14px;
}
.partido-widget-link{
    display:block;
    text-decoration:none !important;
    color:inherit !important;
}
.partido-widget-top{
    margin-bottom:14px;
}
.partido-widget-meta{
    font-size:13px;
    line-height:1.5;
    color:#333;
    margin-bottom:4px;
    word-wrap:break-word;
}
.partido-scoreboard{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:8px;
    text-align:center;
    margin-bottom:8px;
}
.partido-team{
    width:34%;
}
.partido-escudo{
    width:58px;
    height:58px;
    object-fit:contain;
    display:block;
    margin:0 auto 8px auto;
    border:1px solid #ddd;
    background:#fff;
    padding:5px;
}
.partido-no-escudo{
    width:58px;
    height:58px;
    margin:0 auto 8px auto;
    display:flex;
    align-items:center;
    justify-content:center;
    border:1px solid #ddd;
    background:#f7f7f7;
    color:#999;
    font-size:9px;
    text-align:center;
    padding:4px;
}
.partido-team-name{
    font-size:12px;
    font-weight:700;
    line-height:1.25;
    color:#111;
}
.partido-score-center{
    width:32%;
    font-family:Arial, Helvetica, sans-serif;
    font-weight:700;
    color:#0066FF;
    line-height:1;
}
.partido-score-num{
    font-size:28px;
}
.partido-score-sep{
    font-size:22px;
    margin:0 4px;
    color:#222;
}
.partido-score-vs{
    font-size:22px;
    color:#222;
}
.partido-widget-bottom{
    margin-top:14px;
    border-top:1px solid #eee;
    padding-top:12px;
}
.partido-widget-subtitle{
    font-size:12px;
    font-weight:700;
    text-transform:uppercase;
    color:#0066FF;
    margin-bottom:8px;
}
.partido-eventos{
    display:flex;
    flex-direction:column;
    gap:7px;
}
.partido-evento-item{
    display:flex;
    align-items:flex-start;
    gap:7px;
    font-size:13px;
    line-height:1.4;
    color:#222;
}
.partido-evento-icon{
    flex:0 0 16px;
    width:16px;
    text-align:center;
}
.partido-evento-text small{
    color:#777;
    font-size:11px;
}
.partido-widget-empty{
    padding:15px;
    font-size:13px;
    color:#666;
}
@media (max-width: 991px){
    .partido-score-num{
        font-size:24px;
    }
}
</style>

<div id="widget-partido-envivo-wrap">
    <?php echo $widgetHtml; ?>
</div>

<script>
(function(){
    var wrap = document.getElementById('widget-partido-envivo-wrap');
    if (!wrap) return;

    function actualizarTiemposLocales() {
        var nodo = wrap.querySelector('.partido-widget-wrap');
        var target = wrap.querySelector('.partido-tiempo-live');
        if (!nodo || !target) return;

        var modo = nodo.getAttribute('data-modo') || '';
        var estado = nodo.getAttribute('data-estado') || '';
        var fechaHora = nodo.getAttribute('data-fecha-hora') || '';
        var unixInicio1T = parseInt(nodo.getAttribute('data-unix-inicio-1t') || '0', 10);
        var unixInicio2T = parseInt(nodo.getAttribute('data-unix-inicio-2t') || '0', 10);

        var ahora = Math.floor(Date.now() / 1000);

        if (modo === 'upcoming') {
            var inicio = Math.floor(new Date(fechaHora.replace(' ', 'T')).getTime() / 1000);
            if (!isNaN(inicio) && inicio > 0) {
                var resta = inicio - ahora;
                if (resta > 0) {
                    var horas = Math.floor(resta / 3600);
                    var mins = Math.floor((resta % 3600) / 60);
                    target.innerHTML = 'Comienza en ' + String(horas).padStart(2, '0') + ':' + String(mins).padStart(2, '0');
                } else {
                    target.innerHTML = 'Por comenzar';
                }
            }
            return;
        }

        if (estado === 'primer_tiempo' && unixInicio1T > 0) {
            var min1 = Math.floor((ahora - unixInicio1T) / 60) + 1;
            if (min1 < 1) min1 = 1;
            if (min1 > 45) min1 = 45;
            target.innerHTML = "1T " + min1 + "'";
            return;
        }

        if (estado === 'entretiempo') {
            target.innerHTML = 'Entretiempo';
            return;
        }

        if (estado === 'segundo_tiempo' && unixInicio2T > 0) {
            var min2 = 45 + Math.floor((ahora - unixInicio2T) / 60) + 1;
            if (min2 < 46) min2 = 46;
            if (min2 > 90) min2 = 90;
            target.innerHTML = "2T " + min2 + "'";
            return;
        }

        if (estado === 'finalizado') {
            target.innerHTML = 'Finalizado';
            return;
        }

        if (estado === 'suspendido') {
            target.innerHTML = 'Suspendido';
            return;
        }

        if (estado === 'postergado') {
            target.innerHTML = 'Postergado';
            return;
        }
    }

    function refrescarWidget() {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'partido_envivo_div.php?ajax=1&_=' + Date.now(), true);
        xhr.onreadystatechange = function() {
            if (xhr.readyState === 4 && xhr.status === 200) {
                wrap.innerHTML = xhr.responseText;
                actualizarTiemposLocales();
            }
        };
        xhr.send();
    }

    actualizarTiemposLocales();
    setInterval(actualizarTiemposLocales, 1000);
    setInterval(refrescarWidget, 60000);
})();
</script>