<?php
/**
 * Controlador para listar Controles Administrativos
 *
 * Ruta: es:bez:admin_controls
 *
 * @author NICC
 * @date 2026-01-31
 */

/** @var action_plugin_bez $this */

use \dokuwiki\plugin\bez;

// Verificar permisos
if ($this->model->get_level() < BEZ_AUTH_USER) {
    throw new bez\meta\PermissionDeniedException();
}

// Inicializar DB + Factory (consolidado en helper)
list($sqlite, $adminHelper) = helper_plugin_bez_db::initAdmin('AdminControlHelper');

// Procesar filtros
define('BEZ_ADMIN_CONTROL_FILTERS_COOKIE', 'plugin__bez_admin_control_filters');

if (count($_POST) > 0) {
    $raw_filters = $_POST;
} elseif (empty($this->params) && isset($_COOKIE[BEZ_ADMIN_CONTROL_FILTERS_COOKIE])) {
    $raw_filters = json_decode($_COOKIE[BEZ_ADMIN_CONTROL_FILTERS_COOKIE], true);
}

if (isset($raw_filters)) {
    setcookie(BEZ_ADMIN_CONTROL_FILTERS_COOKIE, json_encode($raw_filters));

    $filters = array_filter($raw_filters, function($v) {
        return $v !== '-all' && $v !== '';
    });

    if (empty($filters)) {
        $filters['grupo'] = '-all';
    }

    header('Location: ' . $this->url('admin_controls', $filters));
} else {
    $filters = $this->params;
}

$this->tpl->set_values($filters);

// Obtener grupos para el filtro
$grupos = $adminHelper->getGrupos();

// Obtener aplicadores
$aplicadores = $adminHelper->getAplicadores();

// Obtener grupo actual del filtro
$grupoActual = isset($filters['grupo']) && $filters['grupo'] !== '-all' ? intval($filters['grupo']) : null;

// Si hay un grupo seleccionado, obtener los items de ese grupo
if ($grupoActual) {
    $grupoInfo = $adminHelper->getGrupo($grupoActual);
} else {
    $grupoInfo = null;
}

// Construir datos de progreso para cada aplicador
$datosProgreso = [];
foreach ($aplicadores as $aplicador) {
    $aplicadorId = $aplicador['id'];
    $aplicadorData = [
        'id' => $aplicadorId,
        'nombre' => $aplicador['nombre'],
        'tipo' => $aplicador['tipo'],
        'es_principal' => $aplicador['es_principal'],
        'grupos' => []
    ];

    foreach ($grupos as $grupo) {
        $grupoId = $grupo['id'];
        $progreso = $adminHelper->getProgresoTotalAplicador($aplicadorId, $grupoId);
        $items = $adminHelper->getProgresoAplicador($aplicadorId, $grupoId);

        $aplicadorData['grupos'][$grupoId] = [
            'nombre' => $grupo['nombre'],
            'total' => $progreso['total'],
            'completados' => $progreso['completados'],
            'porcentaje' => $progreso['porcentaje'],
            'items' => $items
        ];
    }

    $datosProgreso[] = $aplicadorData;
}

// Pasar datos al template
$this->tpl->set('grupos', $grupos);
$this->tpl->set('aplicadores', $aplicadores);
$this->tpl->set('datosProgreso', $datosProgreso);
$this->tpl->set('grupoActual', $grupoActual);
$this->tpl->set('grupoInfo', $grupoInfo);
