<?php
/*
|--------------------------------------------------------------------------
| encuesta_div.php
| Archivo para usar como include
|--------------------------------------------------------------------------
| No lleva <html>, <head> ni <body>.
| En el archivo principal conviene tener:
| <meta charset="UTF-8">
|--------------------------------------------------------------------------
*/

if (function_exists('mysqli_report')) {
    @mysqli_report(MYSQLI_REPORT_OFF);
}

$IP = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';

if (!isset($conn) || !is_object($conn)) {
    include_once('concha.php');
}

/*
|--------------------------------------------------------------------------
| Charset de conexión
|--------------------------------------------------------------------------
*/
if (isset($conn) && is_object($conn) && method_exists($conn, 'set_charset')) {
    if (!@$conn->set_charset('utf8mb4')) {
        @$conn->set_charset('utf8');
    }
}

@ini_set('default_charset', 'UTF-8');

/*
|--------------------------------------------------------------------------
| Funciones protegidas
|--------------------------------------------------------------------------
*/

if (!function_exists('encuesta_mojibake_count')) {
    function encuesta_mojibake_count($texto)
    {
        return substr_count($texto, 'Ã')
             + substr_count($texto, 'Â')
             + substr_count($texto, 'â')
             + substr_count($texto, '�');
    }
}

if (!function_exists('encuesta_texto_utf8')) {
    function encuesta_texto_utf8($texto)
    {
        if ($texto === null) {
            return '';
        }

        $texto = (string)$texto;
        $texto = str_replace("\0", '', $texto);

        if ($texto === '') {
            return '';
        }

        /*
        Si no es UTF-8 válido, intentamos convertir desde Windows-1252.
        */
        if (!preg_match('//u', $texto)) {
            if (function_exists('iconv')) {
                $convertido = @iconv('Windows-1252', 'UTF-8//IGNORE', $texto);
                if ($convertido !== false && $convertido !== '') {
                    $texto = $convertido;
                }
            } elseif (function_exists('mb_convert_encoding')) {
                $convertido = @mb_convert_encoding($texto, 'UTF-8', 'Windows-1252');
                if ($convertido !== false && $convertido !== '') {
                    $texto = $convertido;
                }
            }
        }

        /*
        Reparación de mojibake.
        Ejemplos:
        QuiÃ©n     => Quién
        saldrÃ¡    => saldrá
        campeÃ³n   => campeón
        FÃºtbol    => Fútbol
        EspaÃ±a    => España
        */
        for ($i = 0; $i < 3; $i++) {

            $malos_antes = encuesta_mojibake_count($texto);

            if ($malos_antes <= 0) {
                break;
            }

            $nuevo = false;

            /*
            Esta conversión es la clave:
            "QuiÃ©n" queda internamente como bytes UTF-8 correctos de "Quién".
            */
            if (function_exists('utf8_decode')) {
                $tmp = @utf8_decode($texto);

                if ($tmp !== false && $tmp !== '' && preg_match('//u', $tmp)) {
                    $nuevo = $tmp;
                }
            }

            /*
            Fallback con iconv.
            */
            if ($nuevo === false && function_exists('iconv')) {
                $tmp = @iconv('UTF-8', 'Windows-1252//IGNORE', $texto);

                if ($tmp !== false && $tmp !== '' && preg_match('//u', $tmp)) {
                    $nuevo = $tmp;
                }
            }

            if ($nuevo === false || $nuevo === '') {
                break;
            }

            $malos_despues = encuesta_mojibake_count($nuevo);

            if ($malos_despues < $malos_antes) {
                $texto = $nuevo;
            } else {
                break;
            }
        }

        return $texto;
    }
}

if (!function_exists('encuesta_h')) {
    function encuesta_h($texto)
    {
        /*
        htmlentities convierte acentos, ñ y signos en entidades HTML.
        Esto ayuda a que se vea bien aunque la página padre tenga charset conflictivo.
        */
        return htmlentities(encuesta_texto_utf8($texto), ENT_QUOTES, 'UTF-8', false);
    }
}

if (!function_exists('encuesta_porcentaje')) {
    function encuesta_porcentaje($valor, $total)
    {
        $valor = intval($valor);
        $total = intval($total);

        if ($valor <= 0 || $total <= 0) {
            return 0;
        }

        return ($valor * 100) / $total;
    }
}

if (!function_exists('encuesta_mostrar_opcion')) {
    function encuesta_mostrar_opcion($id_encuesta, $respuesta, $porcentaje, $campo)
    {
        $respuesta_limpia = trim(encuesta_texto_utf8($respuesta));

        if ($respuesta_limpia === '') {
            return;
        }

        $porcentaje = floatval($porcentaje);

        if ($porcentaje < 0) {
            $porcentaje = 0;
        }

        if ($porcentaje > 100) {
            $porcentaje = 100;
        }

        $porcentaje_css = number_format($porcentaje, 2, '.', '');
        $porcentaje_txt = number_format($porcentaje, 2, ',', '.');

        $radio_id = 'encuesta_' . intval($id_encuesta) . '_' . encuesta_h($campo);
        ?>

        <div class="encuesta-opcion">
            <label class="encuesta-label" for="<?php echo $radio_id; ?>">
                <input
                    type="radio"
                    id="<?php echo $radio_id; ?>"
                    name="radio"
                    value="<?php echo encuesta_h($campo); ?>"
                    onclick="encuestaSetVoto(this);"
                >

                <span class="encuesta-texto">
                    <?php echo encuesta_h($respuesta_limpia); ?>
                    <strong><?php echo $porcentaje_txt; ?>%</strong>
                </span>
            </label>

            <div class="encuesta-barra">
                <?php if ($porcentaje > 0) { ?>
                    <div class="encuesta-barra-fill" style="width:<?php echo $porcentaje_css; ?>%;"></div>
                <?php } else { ?>
                    <div class="encuesta-barra-fill cero" style="width:0%;"></div>
                <?php } ?>
            </div>
        </div>

        <?php
    }
}
?>

<?php if (!defined('ENCUESTA_INCLUDE_ESTILOS')) { define('ENCUESTA_INCLUDE_ESTILOS', true); ?>

<style>
.encuesta-box {
    background: #ffffff;
    border-radius: 0;
    overflow: hidden;
    margin-bottom: 22px;
    border: 1px solid rgba(0,0,0,0.08);
    box-shadow: 0 8px 24px rgba(0,0,0,0.04);
    box-sizing: border-box;
}

.encuesta-box * {
    box-sizing: border-box;
}

.encuesta-head {
    background: #1728b8;
    color: #ffffff;
    padding: 12px 16px;
    border-bottom: 4px solid rgba(0,0,0,0.18);
}

.encuesta-head h3 {
    margin: 0;
    font-size: 20px;
    font-weight: 500;
    letter-spacing: 0.5px;
    color: #ffffff;
    text-transform: uppercase;
}

.encuesta-contenido {
    padding: 18px;
}

.encuesta-pregunta {
    text-align: center;
    margin: 8px 0 24px 0;
    color: #101070;
    font-size: 22px;
    line-height: 1.25;
    font-weight: 500;
}

.encuesta-opcion {
    padding: 12px 0 15px 0;
    border-bottom: 1px solid rgba(0,0,0,0.08);
}

.encuesta-opcion:last-child {
    border-bottom: none;
}

.encuesta-label {
    display: flex;
    align-items: center;
    gap: 10px;
    cursor: pointer;
    margin: 0 0 10px 0;
    color: #222222;
    font-size: 16px;
    line-height: 1.35;
}

.encuesta-label input[type="radio"] {
    width: 16px;
    height: 16px;
    flex: 0 0 auto;
    margin: 0;
}

.encuesta-texto {
    display: inline-block;
    word-break: normal;
    overflow-wrap: anywhere;
}

.encuesta-texto strong {
    font-weight: 700;
    margin-left: 4px;
}

.encuesta-barra {
    width: 100%;
    height: 22px;
    background: #eeeeee;
    overflow: hidden;
    margin-left: 26px;
    max-width: calc(100% - 26px);
}

.encuesta-barra-fill {
    height: 100%;
    background: #1728b8;
    min-width: 3px;
    transition: width 0.3s ease;
}

.encuesta-barra-fill.cero {
    min-width: 0;
}

.encuesta-acciones {
    text-align: center;
    padding-top: 18px;
}

.encuesta-acciones .btn,
.encuesta-acciones input[type="submit"] {
    padding: 9px 28px;
    border-radius: 0;
    font-size: 15px;
    background: #e5e5e5;
    border: 0;
    color: #222222;
    cursor: pointer;
}

.encuesta-acciones .btn:hover,
.encuesta-acciones input[type="submit"]:hover {
    background: #d8d8d8;
}

.encuesta-ya-voto {
    color: #555555;
    font-size: 15px;
    margin: 10px 0 0 0;
}

@media (max-width: 576px) {
    .encuesta-contenido {
        padding: 15px;
    }

    .encuesta-pregunta {
        font-size: 23px;
    }

    .encuesta-label {
        font-size: 17px;
    }

    .encuesta-barra {
        height: 22px;
    }
}
</style>

<script>
function encuestaSetVoto(radio) {
    if (!radio || !radio.form) {
        return;
    }

    var valor = radio.value;
    var form = radio.form;

    var campos = ['voto', 'opcion', 'respuesta', 'campo', 'var_t', 't'];

    for (var i = 0; i < campos.length; i++) {
        if (form.elements[campos[i]]) {
            form.elements[campos[i]].value = valor;
        }
    }
}

function encuestaValidar(form) {
    var radios = form.querySelectorAll('input[type="radio"][name="radio"]');
    var elegido = '';

    for (var i = 0; i < radios.length; i++) {
        if (radios[i].checked) {
            elegido = radios[i].value;
            break;
        }
    }

    if (elegido === '') {
        alert('Seleccioná una opción para votar.');
        return false;
    }

    var campos = ['voto', 'opcion', 'respuesta', 'campo', 'var_t', 't'];

    for (var j = 0; j < campos.length; j++) {
        if (form.elements[campos[j]]) {
            form.elements[campos[j]].value = elegido;
        }
    }

    return true;
}
</script>

<?php } ?>

<?php
/*
|--------------------------------------------------------------------------
| Textos
|--------------------------------------------------------------------------
*/

$titulo_encuesta = isset($lang_100046) ? $lang_100046 : 'ENCUESTA';
$texto_boton = isset($lang_100047) ? $lang_100047 : 'Votar';
$texto_ya_voto = isset($lang_100048) ? $lang_100048 : 'Ya votaste esta encuesta.';

$action_form = 'votar.php';

if (isset($dom) && trim($dom) !== '') {
    $action_form = rtrim($dom, '/') . '/votar.php';
}

/*
|--------------------------------------------------------------------------
| Consulta principal
|--------------------------------------------------------------------------
*/

$sql = "SELECT * FROM encuestas";
$consulta = false;

if (isset($conn) && is_object($conn)) {
    $consulta = @$conn->query($sql);
}

if (!$consulta) {
    echo '<div class="alert alert-danger">No se pudieron cargar las encuestas.</div>';
} else {

    while ($row = $consulta->fetch_assoc()) {

        $ID = isset($row["ID"]) ? intval($row["ID"]) : 0;

        $pregunta = isset($row["pregunta"]) ? $row["pregunta"] : '';

        $respuestas = array(
            1  => isset($row["r1"])  ? $row["r1"]  : '',
            2  => isset($row["r2"])  ? $row["r2"]  : '',
            3  => isset($row["r3"])  ? $row["r3"]  : '',
            4  => isset($row["r4"])  ? $row["r4"]  : '',
            5  => isset($row["r5"])  ? $row["r5"]  : '',
            6  => isset($row["r6"])  ? $row["r6"]  : '',
            7  => isset($row["r7"])  ? $row["r7"]  : '',
            8  => isset($row["r8"])  ? $row["r8"]  : '',
            9  => isset($row["r9"])  ? $row["r9"]  : '',
            10 => isset($row["r10"]) ? $row["r10"] : ''
        );

        $totales = array(
            1  => isset($row["t1"])  ? intval($row["t1"])  : 0,
            2  => isset($row["t2"])  ? intval($row["t2"])  : 0,
            3  => isset($row["t3"])  ? intval($row["t3"])  : 0,
            4  => isset($row["t4"])  ? intval($row["t4"])  : 0,
            5  => isset($row["t5"])  ? intval($row["t5"])  : 0,
            6  => isset($row["t6"])  ? intval($row["t6"])  : 0,
            7  => isset($row["t7"])  ? intval($row["t7"])  : 0,
            8  => isset($row["t8"])  ? intval($row["t8"])  : 0,
            9  => isset($row["t9"])  ? intval($row["t9"])  : 0,
            10 => isset($row["t10"]) ? intval($row["t10"]) : 0
        );

        $total_votos = 0;

        for ($i = 1; $i <= 10; $i++) {
            $total_votos += $totales[$i];
        }

        /*
        ----------------------------------------------------------------------
        Verificar si ya votó
        ----------------------------------------------------------------------
        Tu tabla ip_encuestas no tiene columna ID,
        por eso se usa SELECT *.
        */

        $encuesta_cookie = isset($_COOKIE[(string)$ID]) ? $_COOKIE[(string)$ID] : '';

        $ya_voto_ip = false;

        if (isset($conn) && is_object($conn)) {
            $ID_sql = $conn->real_escape_string($ID);
            $IP_sql = $conn->real_escape_string($IP);

            $sql3 = "SELECT * FROM ip_encuestas WHERE encuesta = '$ID_sql' AND IP = '$IP_sql' LIMIT 1";
            $consulta3 = @$conn->query($sql3);

            if ($consulta3 && $consulta3->num_rows > 0) {
                $ya_voto_ip = true;
            }

            if ($consulta3) {
                $consulta3->free_result();
            }
        }
        ?>

        <article class="encuesta-box">

            <div class="encuesta-head">
                <h3><?php echo encuesta_h($titulo_encuesta); ?></h3>
            </div>

            <div class="encuesta-contenido">

                <h3 class="encuesta-pregunta">
                    <?php echo encuesta_h($pregunta); ?>
                </h3>

                <form
                    action="<?php echo encuesta_h($action_form); ?>"
                    method="post"
                    name="form_encuesta_<?php echo $ID; ?>"
                    id="form_encuesta_<?php echo $ID; ?>"
                    onsubmit="return encuestaValidar(this);"
                >

                    <input name="ID" type="hidden" value="<?php echo $ID; ?>">

                    <!-- Compatibilidad para distintos votar.php -->
                    <input name="voto" type="hidden" value="">
                    <input name="opcion" type="hidden" value="">
                    <input name="respuesta" type="hidden" value="">
                    <input name="campo" type="hidden" value="">
                    <input name="var_t" type="hidden" value="">
                    <input name="t" type="hidden" value="">

                    <div class="form-group">

                        <?php
                        for ($i = 1; $i <= 10; $i++) {
                            $campo = 't' . $i;
                            $porcentaje = encuesta_porcentaje($totales[$i], $total_votos);
                            encuesta_mostrar_opcion($ID, $respuestas[$i], $porcentaje, $campo);
                        }
                        ?>

                        <div class="encuesta-acciones">

                            <?php if ($encuesta_cookie == 1 || $ya_voto_ip) { ?>

                                <p class="encuesta-ya-voto">
                                    <?php echo encuesta_h($texto_ya_voto); ?>
                                </p>

                            <?php } else { ?>

                                <input
                                    class="btn btn-outline-primary mt-2"
                                    type="submit"
                                    name="button"
                                    id="button_<?php echo $ID; ?>"
                                    value="<?php echo encuesta_h($texto_boton); ?>"
                                >

                            <?php } ?>

                        </div>

                    </div>

                </form>

            </div>

        </article>

        <?php
    }

    $consulta->free_result();
}
?>