<?php
/* ==========================================================
   CONFIGURACIÓN - MÓDULO FUNCIONAL
   Archivo para: /app/modulos/configuracion.php
   Panel Superadministrador
========================================================== */

if (!isset($conn)) {
    include(__DIR__ . "/../config.php");
}

$admin_id = intval($_SESSION['usuario_id'] ?? 0);

$cfg = isset($_GET['cfg']) ? $_GET['cfg'] : 'medios';
if (!in_array($cfg, ['medios','tonos','etiquetas'])) {
    $cfg = 'medios';
}

$mensaje_cfg = "";
if (isset($_SESSION['cfg_import_resultado'])) {
    $mensaje_cfg = $_SESSION['cfg_import_resultado'];
    unset($_SESSION['cfg_import_resultado']);
}

function cfg_h($v){
    return htmlspecialchars($v ?? '', ENT_QUOTES, 'UTF-8');
}

function cfg_redirigir_medios($archivados = false){
    $url = 'dashboard_superadmin.php?modulo=configuracion&cfg=medios';

    if ($archivados) {
        $url .= '&archivados_medios=1';
    }

    if (!headers_sent()) {
        header('Location: ' . $url);
        exit();
    }

    echo '<script>window.location.replace(' . json_encode($url) . ');</script>';
    exit();
}

function cfg_redirigir_tonos(){
    $url = 'dashboard_superadmin.php?modulo=configuracion&cfg=tonos';

    if (!headers_sent()) {
        header('Location: ' . $url);
        exit();
    }

    echo '<script>window.location.replace(' . json_encode($url) . ');</script>';
    exit();
}

function cfg_redirigir_etiquetas($archivadas = false){
    $url = 'dashboard_superadmin.php?modulo=configuracion&cfg=etiquetas';
    if ($archivadas) {
        $url .= '&archivadas=1';
    }

    if (!headers_sent()) {
        header('Location: ' . $url);
        exit();
    }

    echo '<script>window.location.replace(' . json_encode($url) . ');</script>';
    exit();
}


function cfg_columna_existe($conn, $tabla, $columna){
    $tabla = $conn->real_escape_string($tabla);
    $columna = $conn->real_escape_string($columna);
    $r = $conn->query("SHOW COLUMNS FROM `$tabla` LIKE '$columna'");
    return ($r && $r->num_rows > 0);
}


function cfg_columna_excel_indice($referencia){
    $letras = preg_replace('/[^A-Z]/', '', strtoupper((string)$referencia));
    $indice = 0;
    for ($i = 0; $i < strlen($letras); $i++) {
        $indice = ($indice * 26) + (ord($letras[$i]) - 64);
    }
    return max(0, $indice - 1);
}

function cfg_leer_xlsx($archivo_tmp, &$error){
    $error = '';
    $filas = [];

    if (!class_exists('ZipArchive')) {
        $error = 'El servidor no tiene habilitado ZipArchive, necesario para leer archivos XLSX.';
        return $filas;
    }

    $zip = new ZipArchive();
    if ($zip->open($archivo_tmp) !== true) {
        $error = 'No se pudo abrir el archivo Excel.';
        return $filas;
    }

    $sharedStrings = [];
    $sharedXml = $zip->getFromName('xl/sharedStrings.xml');
    if ($sharedXml !== false) {
        $xmlShared = simplexml_load_string($sharedXml);
        if ($xmlShared) {
            foreach ($xmlShared->si as $si) {
                $texto = '';
                if (isset($si->t)) {
                    $texto = (string)$si->t;
                } elseif (isset($si->r)) {
                    foreach ($si->r as $r) {
                        $texto .= (string)$r->t;
                    }
                }
                $sharedStrings[] = trim($texto);
            }
        }
    }

    $sheetXml = $zip->getFromName('xl/worksheets/sheet1.xml');
    if ($sheetXml === false) {
        $zip->close();
        $error = 'El Excel no contiene una primera hoja válida.';
        return $filas;
    }

    $xmlSheet = simplexml_load_string($sheetXml);
    if (!$xmlSheet) {
        $zip->close();
        $error = 'No se pudo leer la primera hoja del Excel.';
        return $filas;
    }

    foreach ($xmlSheet->sheetData->row as $row) {
        $fila = [];
        foreach ($row->c as $cell) {
            $ref = (string)$cell['r'];
            $idx = cfg_columna_excel_indice($ref);
            $tipo = (string)$cell['t'];
            $valor = '';

            if ($tipo === 'inlineStr' && isset($cell->is->t)) {
                $valor = (string)$cell->is->t;
            } elseif (isset($cell->v)) {
                $valor = (string)$cell->v;
                if ($tipo === 's') {
                    $pos = intval($valor);
                    $valor = $sharedStrings[$pos] ?? '';
                } elseif ($tipo === 'b') {
                    $valor = ($valor === '1') ? '1' : '0';
                }
            }

            $fila[$idx] = trim((string)$valor);
        }

        if (!empty($fila)) {
            $max = max(array_keys($fila));
            for ($i = 0; $i <= $max; $i++) {
                if (!array_key_exists($i, $fila)) {
                    $fila[$i] = '';
                }
            }
            ksort($fila);
            $filas[] = array_values($fila);
        }
    }

    $zip->close();
    return $filas;
}

function cfg_normalizar_tipo_medio($tipo){
    $tipo = trim((string)$tipo);
    $mayus = function_exists('mb_strtoupper') ? mb_strtoupper($tipo, 'UTF-8') : strtoupper($tipo);

    if (strpos($mayus, 'DIARIO') !== false || strpos($mayus, 'PRENSA') !== false) return 'Prensa';
    if (strpos($mayus, 'RADIO') !== false) return 'Radio';
    if (strpos($mayus, 'TELE') !== false || $mayus === 'TV') return 'Televisión';
    if (strpos($mayus, 'WEB') !== false || strpos($mayus, 'PÁGINA') !== false || strpos($mayus, 'PAGINA') !== false) return 'Página Web';
    if (strpos($mayus, 'RED') !== false || strpos($mayus, 'SOCIAL') !== false) return 'Redes Sociales';

    return $tipo;
}

function cfg_normalizar_estado_medio($estado){
    $estado = trim((string)$estado);
    if ($estado === '') return 'activo';
    $mayus = function_exists('mb_strtoupper') ? mb_strtoupper($estado, 'UTF-8') : strtoupper($estado);
    if (strpos($mayus, 'INACT') !== false || strpos($mayus, 'ARCHIV') !== false || strpos($mayus, 'SUSP') !== false) return 'inactivo';
    return 'activo';
}

/* Columnas requeridas por el Excel maestro. Se crean solo si aún no existen. */
if (!cfg_columna_existe($conn, 'medios', 'frecuencia')) {
    $conn->query("ALTER TABLE medios ADD frecuencia VARCHAR(120) NULL AFTER nombre_medio");
}
if (!cfg_columna_existe($conn, 'medios', 'valor')) {
    $conn->query("ALTER TABLE medios ADD valor VARCHAR(120) NULL AFTER frecuencia");
}
if (!cfg_columna_existe($conn, 'medios', 'url')) {
    $conn->query("ALTER TABLE medios ADD url TEXT NULL AFTER valor");
}
if (!cfg_columna_existe($conn, 'medios', 'estado')) {
    $conn->query("ALTER TABLE medios ADD estado VARCHAR(30) NOT NULL DEFAULT 'activo' AFTER url");
}
if (!cfg_columna_existe($conn, 'medios', 'fecha_creacion')) {
    $conn->query("ALTER TABLE medios ADD fecha_creacion DATETIME NULL DEFAULT CURRENT_TIMESTAMP");
}

$conn->query("CREATE TABLE IF NOT EXISTS config_importaciones_medios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL DEFAULT 0,
    archivo VARCHAR(255) NOT NULL,
    nuevos INT NOT NULL DEFAULT 0,
    actualizados INT NOT NULL DEFAULT 0,
    sin_cambios INT NOT NULL DEFAULT 0,
    omitidos INT NOT NULL DEFAULT 0,
    fecha DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");

$tiene_estado_medios = cfg_columna_existe($conn, 'medios', 'estado');
$tiene_fecha_medios = cfg_columna_existe($conn, 'medios', 'fecha_creacion');
$tiene_valor_medios = cfg_columna_existe($conn, 'medios', 'valor');
$tiene_costo_medios = cfg_columna_existe($conn, 'medios', 'costo');
$tiene_tarifa_medios = cfg_columna_existe($conn, 'medios', 'tarifa');

/* ==========================================================
   ACCIONES: MEDIOS
========================================================== */
if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST['cfg_accion'])) {

    $accion = limpiarDato($_POST['cfg_accion']);
    
    if($accion=="guardar_tono"){

    $id = intval($_POST["tono_id"] ?? 0);
    $nombre = limpiarDato($_POST["nombre"] ?? "");
    $color = limpiarDato($_POST["color"] ?? "#30d020");

    if($id > 0){

        $conn->query("UPDATE tonos
                      SET nombre='".$conn->real_escape_string($nombre)."',
                          color='".$conn->real_escape_string($color)."'
                      WHERE id=".$id);

    }else{

        $conn->query("INSERT INTO tonos(nombre,color)
                      VALUES(
                      '".$conn->real_escape_string($nombre)."',
                      '".$conn->real_escape_string($color)."')");
    }

    cfg_redirigir_tonos();
}
    
    if($accion === "eliminar_tonos"){

    $ids = isset($_POST['tonos_ids']) && is_array($_POST['tonos_ids'])
        ? $_POST['tonos_ids']
        : [];

    if(count($ids) === 0){
        $mensaje_cfg = "Primero selecciona uno o más tonos.";
    }else{
        foreach($ids as $tono_id){
            $tono_id = intval($tono_id);

            if($tono_id > 0){
                $conn->query("DELETE FROM tonos WHERE id='$tono_id' LIMIT 1");
            }
        }

        cfg_redirigir_tonos();
    }
}

    if($accion === "archivar_tonos"){

        $ids = isset($_POST['tonos_ids']) && is_array($_POST['tonos_ids'])
            ? $_POST['tonos_ids']
            : [];

        if(count($ids) === 0){
            $mensaje_cfg = "Primero selecciona uno o más tonos.";
        }else{
            foreach($ids as $tono_id){
                $tono_id = intval($tono_id);

                if($tono_id > 0){
                    $conn->query("UPDATE tonos SET estado='archivado' WHERE id='$tono_id' LIMIT 1");
                }
            }

            cfg_redirigir_tonos();
        }
    }
    
    


    if ($accion === "guardar_etiqueta") {
        $etiqueta_id = intval($_POST['etiqueta_id'] ?? 0);
        $nombre_etiqueta = limpiarDato($_POST['nombre_etiqueta'] ?? '');

        if ($nombre_etiqueta === '') {
            $mensaje_cfg = 'Escribe el nombre de la etiqueta.';
        } else {
            $nombre_sql = $conn->real_escape_string($nombre_etiqueta);
            $q_duplicada = $conn->query("SELECT id, estado FROM etiquetas WHERE LOWER(nombre)=LOWER('$nombre_sql') LIMIT 1");

            if ($etiqueta_id > 0) {
                $q_otra = $conn->query("SELECT id FROM etiquetas WHERE LOWER(nombre)=LOWER('$nombre_sql') AND id<>'$etiqueta_id' LIMIT 1");
                if ($q_otra && $q_otra->num_rows > 0) {
                    $mensaje_cfg = 'Ya existe otra etiqueta con ese nombre.';
                } else {
                    $conn->query("UPDATE etiquetas SET nombre='$nombre_sql' WHERE id='$etiqueta_id' LIMIT 1");
                    cfg_redirigir_etiquetas(false);
                }
            } elseif ($q_duplicada && $q_duplicada->num_rows > 0) {
                $existente = $q_duplicada->fetch_assoc();
                $id_existente = intval($existente['id'] ?? 0);
                $estado_existente = $existente['estado'] ?? 'activo';
                if ($estado_existente === 'archivado' && $id_existente > 0) {
                    $conn->query("UPDATE etiquetas SET estado='activo' WHERE id='$id_existente' LIMIT 1");
                    cfg_redirigir_etiquetas(false);
                } else {
                    $mensaje_cfg = 'Esta etiqueta ya existe.';
                }
            } else {
                $conn->query("INSERT INTO etiquetas (nombre, estado) VALUES ('$nombre_sql', 'activo')");
                cfg_redirigir_etiquetas(false);
            }
        }
    }

    if (in_array($accion, ['archivar_etiquetas','desarchivar_etiquetas','eliminar_etiquetas'], true)) {
        $ids = isset($_POST['etiquetas_ids']) && is_array($_POST['etiquetas_ids']) ? $_POST['etiquetas_ids'] : [];
        $volver_archivadas = !empty($_POST['vista_archivadas']);

        if (count($ids) === 0) {
            $mensaje_cfg = 'Primero selecciona una o más etiquetas.';
        } else {
            foreach ($ids as $etiqueta_id) {
                $etiqueta_id = intval($etiqueta_id);
                if ($etiqueta_id <= 0) continue;

                if ($accion === 'archivar_etiquetas') {
                    $conn->query("UPDATE etiquetas SET estado='archivado' WHERE id='$etiqueta_id' LIMIT 1");
                } elseif ($accion === 'desarchivar_etiquetas') {
                    $conn->query("UPDATE etiquetas SET estado='activo' WHERE id='$etiqueta_id' LIMIT 1");
                } else {
                    $conn->query("DELETE FROM etiquetas WHERE id='$etiqueta_id' LIMIT 1");
                }
            }

            cfg_redirigir_etiquetas($accion === 'desarchivar_etiquetas' ? true : $volver_archivadas);
        }
    }

    if ($accion === "importar_excel") {

        if (!isset($_FILES['archivo_excel']) || empty($_FILES['archivo_excel']['name'])) {
            $mensaje_cfg = "Selecciona el archivo Excel que contiene los medios.";
        } elseif (intval($_FILES['archivo_excel']['error']) !== UPLOAD_ERR_OK) {
            $mensaje_cfg = "No se pudo recibir el archivo Excel. Vuelve a seleccionarlo.";
        } else {
            $extension = strtolower(pathinfo($_FILES['archivo_excel']['name'], PATHINFO_EXTENSION));

            if ($extension !== 'xlsx') {
                $mensaje_cfg = "Solo se permite un archivo Excel en formato .xlsx.";
            } else {
                $error_excel = '';
                $filas_excel = cfg_leer_xlsx($_FILES['archivo_excel']['tmp_name'], $error_excel);

                if ($error_excel !== '') {
                    $mensaje_cfg = $error_excel;
                } elseif (count($filas_excel) < 2) {
                    $mensaje_cfg = "El archivo Excel no contiene medios para importar.";
                } else {
                    $encabezados = [];
                    foreach ($filas_excel[0] as $idx => $enc) {
                        $encabezados[strtoupper(trim((string)$enc))] = $idx;
                    }

                    $requeridos = ['TIPO','REGION','PROVINCIA','CIUDAD','MEDIO','FRECUENCIA','VALOR','URL','ESTADO'];
                    $faltantes = [];
                    foreach ($requeridos as $req) {
                        if (!array_key_exists($req, $encabezados)) $faltantes[] = $req;
                    }

                    if (count($faltantes) > 0) {
                        $mensaje_cfg = "El Excel no tiene estas columnas: " . implode(', ', $faltantes) . ".";
                    } else {
                        $primera_importacion = 0;
                        $q_importaciones = $conn->query("SELECT COUNT(*) AS total FROM config_importaciones_medios");
                        if ($q_importaciones) {
                            $r_importaciones = $q_importaciones->fetch_assoc();
                            $primera_importacion = (intval($r_importaciones['total'] ?? 0) === 0) ? 1 : 0;
                        }

                        /* La primera importación limpia las tarjetas antiguas de prueba. */
                        if ($primera_importacion === 1) {
                            $conn->query("DELETE FROM medios");
                        }

                        $nuevos = 0;
                        $actualizados = 0;
                        $sin_cambios = 0;
                        $omitidos = 0;

                        $conn->begin_transaction();

                        try {
                            foreach ($filas_excel as $numero => $fila) {
                                if ($numero === 0) continue;

                                $tipo = cfg_normalizar_tipo_medio($fila[$encabezados['TIPO']] ?? '');
                                $region = trim((string)($fila[$encabezados['REGION']] ?? ''));
                                $provincia = trim((string)($fila[$encabezados['PROVINCIA']] ?? ''));
                                $ciudad = trim((string)($fila[$encabezados['CIUDAD']] ?? ''));
                                $medio = trim((string)($fila[$encabezados['MEDIO']] ?? ''));
                                $frecuencia = trim((string)($fila[$encabezados['FRECUENCIA']] ?? ''));
                                $valor = trim((string)($fila[$encabezados['VALOR']] ?? ''));
                                $url = trim((string)($fila[$encabezados['URL']] ?? ''));
                                $estado = cfg_normalizar_estado_medio($fila[$encabezados['ESTADO']] ?? '');

                                if ($tipo === '' || $region === '' || $provincia === '' || $ciudad === '' || $medio === '') {
                                    $omitidos++;
                                    continue;
                                }

                                $tipo_sql = $conn->real_escape_string($tipo);
                                $region_sql = $conn->real_escape_string($region);
                                $provincia_sql = $conn->real_escape_string($provincia);
                                $ciudad_sql = $conn->real_escape_string($ciudad);
                                $medio_sql = $conn->real_escape_string($medio);
                                $frecuencia_sql = $conn->real_escape_string($frecuencia);
                                $valor_sql = $conn->real_escape_string($valor);
                                $url_sql = $conn->real_escape_string($url);
                                $estado_sql = $conn->real_escape_string($estado);

                                $q_existente = $conn->query("SELECT id, frecuencia, valor, url, estado FROM medios
                                    WHERE LOWER(tipo_medio)=LOWER('$tipo_sql')
                                    AND LOWER(region)=LOWER('$region_sql')
                                    AND LOWER(provincia)=LOWER('$provincia_sql')
                                    AND LOWER(ciudad)=LOWER('$ciudad_sql')
                                    AND LOWER(nombre_medio)=LOWER('$medio_sql')
                                    LIMIT 1");

                                if ($q_existente && $q_existente->num_rows > 0) {
                                    $existente = $q_existente->fetch_assoc();
                                    $cambio = (
                                        trim((string)($existente['frecuencia'] ?? '')) !== $frecuencia ||
                                        trim((string)($existente['valor'] ?? '')) !== $valor ||
                                        trim((string)($existente['url'] ?? '')) !== $url ||
                                        trim((string)($existente['estado'] ?? 'activo')) !== $estado
                                    );

                                    if ($cambio) {
                                        $id_medio = intval($existente['id']);
                                        $conn->query("UPDATE medios SET
                                            frecuencia='$frecuencia_sql',
                                            valor='$valor_sql',
                                            url='$url_sql',
                                            estado='$estado_sql'
                                            WHERE id='$id_medio' LIMIT 1");
                                        $actualizados++;
                                    } else {
                                        $sin_cambios++;
                                    }
                                } else {
                                    $conn->query("INSERT INTO medios
                                        (region, provincia, ciudad, tipo_medio, nombre_medio, frecuencia, valor, url, estado, fecha_creacion)
                                        VALUES
                                        ('$region_sql', '$provincia_sql', '$ciudad_sql', '$tipo_sql', '$medio_sql', '$frecuencia_sql', '$valor_sql', '$url_sql', '$estado_sql', NOW())");
                                    $nuevos++;
                                }
                            }

                            $archivo_nombre = $conn->real_escape_string(basename($_FILES['archivo_excel']['name']));
                            $conn->query("INSERT INTO config_importaciones_medios
                                (usuario_id, archivo, nuevos, actualizados, sin_cambios, omitidos)
                                VALUES ('$admin_id', '$archivo_nombre', '$nuevos', '$actualizados', '$sin_cambios', '$omitidos')");

                            $conn->query("INSERT INTO bitacora (usuario_id, accion, nota_id)
                                VALUES ('$admin_id', 'Importó medios desde Excel: nuevos $nuevos, actualizados $actualizados, sin cambios $sin_cambios, omitidos $omitidos', '0')");

                            $conn->commit();
                            $_SESSION['cfg_import_resultado'] = "Importación terminada. Nuevos: $nuevos | Actualizados: $actualizados | Sin cambios: $sin_cambios | Omitidos: $omitidos";
                            cfg_redirigir_medios();
                        } catch (Throwable $e) {
                            $conn->rollback();
                            $mensaje_cfg = "La importación no pudo terminar: " . cfg_h($e->getMessage());
                        }
                    }
                }
            }
        }
    }

    if ($accion === "crear_medio") {

        $region = limpiarDato($_POST['region'] ?? "");
        $provincia = limpiarDato($_POST['provincia'] ?? "");
        $ciudad = limpiarDato($_POST['ciudad'] ?? "");
        $tipo_medio = cfg_normalizar_tipo_medio($_POST['tipo_medio'] ?? "");
        $nombre_medio = limpiarDato($_POST['nombre_medio'] ?? "");

        if ($region === "" || $provincia === "" || $ciudad === "" || $tipo_medio === "" || $nombre_medio === "") {
            $mensaje_cfg = "Completa todos los campos obligatorios.";
        } else {
            $region_sql = $conn->real_escape_string($region);
            $provincia_sql = $conn->real_escape_string($provincia);
            $ciudad_sql = $conn->real_escape_string($ciudad);
            $tipo_sql = $conn->real_escape_string($tipo_medio);
            $nombre_sql = $conn->real_escape_string($nombre_medio);

            $verificar = $conn->query("SELECT id FROM medios
                                       WHERE LOWER(region)=LOWER('$region_sql')
                                       AND LOWER(provincia)=LOWER('$provincia_sql')
                                       AND LOWER(ciudad)=LOWER('$ciudad_sql')
                                       AND LOWER(tipo_medio)=LOWER('$tipo_sql')
                                       AND LOWER(nombre_medio)=LOWER('$nombre_sql')
                                       LIMIT 1");

            if ($verificar && $verificar->num_rows > 0) {
                $medio_existente = $verificar->fetch_assoc();
                $id_existente = intval($medio_existente['id'] ?? 0);

                $estado_actual = 'activo';
                if ($tiene_estado_medios && $id_existente > 0) {
                    $q_estado = $conn->query("SELECT estado FROM medios WHERE id='$id_existente' LIMIT 1");
                    if ($q_estado && $q_estado->num_rows > 0) {
                        $r_estado = $q_estado->fetch_assoc();
                        $estado_actual = trim((string)($r_estado['estado'] ?? 'activo'));
                    }
                }

                if ($tiene_estado_medios && $id_existente > 0 && $estado_actual !== 'activo') {
                    $conn->query("UPDATE medios SET estado='activo' WHERE id='$id_existente' LIMIT 1");
                    $conn->query("INSERT INTO bitacora (usuario_id, accion, nota_id)
                                  VALUES ('$admin_id', 'Reactivó medio ID: $id_existente', '0')");
                    cfg_redirigir_medios();
                } else {
                    $mensaje_cfg = "Este medio ya existe.";
                }
            } else {
                $campos = ["region","provincia","ciudad","tipo_medio","nombre_medio"];
                $valores = ["'$region_sql'","'$provincia_sql'","'$ciudad_sql'","'$tipo_sql'","'$nombre_sql'"];

                if ($tiene_estado_medios) {
                    $campos[] = "estado";
                    $valores[] = "'activo'";
                }

                if ($tiene_fecha_medios) {
                    $campos[] = "fecha_creacion";
                    $valores[] = "NOW()";
                }

                $sql_insert = "INSERT INTO medios (".implode(",", $campos).") VALUES (".implode(",", $valores).")";

                if ($conn->query($sql_insert)) {
                    $medio_id = intval($conn->insert_id);
                    $conn->query("INSERT INTO bitacora (usuario_id, accion, nota_id)
                                  VALUES ('$admin_id', 'Creó medio ID: $medio_id', '0')");
                    cfg_redirigir_medios();
                } else {
                    $mensaje_cfg = "No se pudo crear el medio: " . cfg_h($conn->error);
                }
            }
        }
    }


    if ($accion === "actualizar_medio") {

        $id_medio = intval($_POST['medio_id'] ?? 0);
        $region = limpiarDato($_POST['region'] ?? "");
        $provincia = limpiarDato($_POST['provincia'] ?? "");
        $ciudad = limpiarDato($_POST['ciudad'] ?? "");
        $tipo_medio = cfg_normalizar_tipo_medio($_POST['tipo_medio'] ?? "");
        $nombre_medio = limpiarDato($_POST['nombre_medio'] ?? "");
        $frecuencia = limpiarDato($_POST['frecuencia'] ?? "");
        $valor = limpiarDato($_POST['valor'] ?? "");
        $url = trim((string)($_POST['url'] ?? ""));
        $estado = cfg_normalizar_estado_medio($_POST['estado'] ?? "activo");

        if ($id_medio <= 0 || $region === "" || $provincia === "" || $ciudad === "" || $tipo_medio === "" || $nombre_medio === "") {
            $mensaje_cfg = "Completa todos los campos obligatorios del medio.";
        } else {
            $region_sql = $conn->real_escape_string($region);
            $provincia_sql = $conn->real_escape_string($provincia);
            $ciudad_sql = $conn->real_escape_string($ciudad);
            $tipo_sql = $conn->real_escape_string($tipo_medio);
            $nombre_sql = $conn->real_escape_string($nombre_medio);
            $frecuencia_sql = $conn->real_escape_string($frecuencia);
            $valor_sql = $conn->real_escape_string($valor);
            $url_sql = $conn->real_escape_string($url);
            $estado_sql = $conn->real_escape_string($estado);

            $duplicado = $conn->query("SELECT id FROM medios
                                       WHERE LOWER(region)=LOWER('$region_sql')
                                       AND LOWER(provincia)=LOWER('$provincia_sql')
                                       AND LOWER(ciudad)=LOWER('$ciudad_sql')
                                       AND LOWER(tipo_medio)=LOWER('$tipo_sql')
                                       AND LOWER(nombre_medio)=LOWER('$nombre_sql')
                                       AND id!='$id_medio'
                                       LIMIT 1");

            if ($duplicado && $duplicado->num_rows > 0) {
                $mensaje_cfg = "Ya existe otro medio con esos mismos datos.";
            } else {
                $ok = $conn->query("UPDATE medios SET
                                    region='$region_sql',
                                    provincia='$provincia_sql',
                                    ciudad='$ciudad_sql',
                                    tipo_medio='$tipo_sql',
                                    nombre_medio='$nombre_sql',
                                    frecuencia='$frecuencia_sql',
                                    valor='$valor_sql',
                                    url='$url_sql',
                                    estado='$estado_sql'
                                    WHERE id='$id_medio' LIMIT 1");
                if ($ok) {
                    $conn->query("INSERT INTO bitacora (usuario_id, accion, nota_id)
                                  VALUES ('$admin_id', 'Actualizó medio ID: $id_medio', '0')");
                    cfg_redirigir_medios();
                } else {
                    $mensaje_cfg = "No se pudo actualizar el medio: " . cfg_h($conn->error);
                }
            }
        }
    }

    if (in_array($accion, ["archivar_medios", "desarchivar_medios", "eliminar_medios"], true)) {

        $ids = isset($_POST['medios_ids']) && is_array($_POST['medios_ids']) ? $_POST['medios_ids'] : [];
        $volver_archivados_medios = !empty($_POST['vista_archivados_medios']);

        if (count($ids) === 0) {
            $mensaje_cfg = "Primero selecciona uno o más medios.";
        } else {
            foreach ($ids as $mid) {
                $mid = intval($mid);
                if ($mid <= 0) { continue; }

                if ($accion === "archivar_medios") {
                    if ($tiene_estado_medios) {
                        $conn->query("UPDATE medios SET estado='inactivo' WHERE id='$mid' LIMIT 1");
                    }
                    $conn->query("INSERT INTO bitacora (usuario_id, accion, nota_id)
                                  VALUES ('$admin_id', 'Archivó medio ID: $mid', '0')");
                }

                if ($accion === "desarchivar_medios") {
                    if ($tiene_estado_medios) {
                        $conn->query("UPDATE medios SET estado='activo' WHERE id='$mid' LIMIT 1");
                    }
                    $conn->query("INSERT INTO bitacora (usuario_id, accion, nota_id)
                                  VALUES ('$admin_id', 'Desarchivó medio ID: $mid', '0')");
                }

                if ($accion === "eliminar_medios") {
                    $conn->query("DELETE FROM medios WHERE id='$mid' LIMIT 1");
                    $conn->query("INSERT INTO bitacora (usuario_id, accion, nota_id)
                                  VALUES ('$admin_id', 'Eliminó medio ID: $mid', '0')");
                }
            }

            cfg_redirigir_medios(
                $accion === "desarchivar_medios"
                    ? true
                    : $volver_archivados_medios
            );
        }
    }
}

/* ==========================================================
   FILTROS MEDIOS
========================================================== */
$filtro_tipo = limpiarDato($_GET['tipo_medio'] ?? "");
$filtro_region = limpiarDato($_GET['region'] ?? "");
$filtro_provincia = limpiarDato($_GET['provincia'] ?? "");
$filtro_busqueda = limpiarDato($_GET['buscar'] ?? "");
$filtro_archivados_medios = isset($_GET['archivados_medios']) && $_GET['archivados_medios'] == '1';

$where_medios = "WHERE 1=1";

if ($tiene_estado_medios) {
    if ($filtro_archivados_medios) {
        $where_medios .= " AND estado='inactivo'";
    } else {
        $where_medios .= " AND (estado='activo' OR estado IS NULL OR estado='')";
    }
}

if ($filtro_tipo !== "") {
    $filtro_tipo_sql = $conn->real_escape_string($filtro_tipo);
    $where_medios .= " AND tipo_medio='$filtro_tipo_sql'";
}

if ($filtro_region !== "") {
    $filtro_region_sql = $conn->real_escape_string($filtro_region);
    $where_medios .= " AND region='$filtro_region_sql'";
}
if ($filtro_provincia !== "") {
    $p=$conn->real_escape_string($filtro_provincia);
    $where_medios .= " AND provincia='$p'";
}
if ($filtro_busqueda !== "") {
    $b=$conn->real_escape_string($filtro_busqueda);
    $where_medios .= " AND (nombre_medio LIKE '%$b%' OR provincia LIKE '%$b%' OR ciudad LIKE '%$b%' OR frecuencia LIKE '%$b%')";
}

/* Listas para filtros */
$tipos_medios = ['Prensa','Radio','Televisión','Página Web','Redes Sociales'];

$regiones_medios = [];
$q_regiones = $conn->query("SELECT DISTINCT region FROM medios WHERE region<>'' ORDER BY region ASC");
if ($q_regiones) {
    while ($r = $q_regiones->fetch_assoc()) {
        $regiones_medios[] = $r['region'];
    }
}

$provincias_medios = [];

$sqlProv = "SELECT DISTINCT provincia FROM medios ";

if ($filtro_region !== "") {
    $sqlProv .= "WHERE region='".$conn->real_escape_string($filtro_region)."' AND provincia<>'' ";
} else {
    $sqlProv .= "WHERE provincia<>'' ";
}

$sqlProv .= "ORDER BY provincia ASC";

$q_prov = $conn->query($sqlProv);

if($q_prov){
    while($r = $q_prov->fetch_assoc()){
        $provincias_medios[] = $r['provincia'];
    }
}

/* Medios reales */
$medios = [];
$hay_importacion_excel = false;
$q_hay_importacion = $conn->query("SELECT COUNT(*) AS total FROM config_importaciones_medios");
if ($q_hay_importacion) {
    $r_hay_importacion = $q_hay_importacion->fetch_assoc();
    $hay_importacion_excel = intval($r_hay_importacion['total'] ?? 0) > 0;
}

$sql_medios = "SELECT * FROM medios
               $where_medios
               ORDER BY nombre_medio ASC";
$q_medios = $conn->query($sql_medios);

if ($q_medios && $q_medios->num_rows > 0) {
    while ($m = $q_medios->fetch_assoc()) {

        $nombre = $m['nombre_medio'] ?? '';
        $tipo = $m['tipo_medio'] ?? '';
        $region = $m['region'] ?? '';
        $provincia = $m['provincia'] ?? '';
        $ciudad = $m['ciudad'] ?? '';

        $valor = "—";
        if ($tiene_valor_medios && isset($m['valor']) && $m['valor'] !== "") {
            $valor = $m['valor'];
        } elseif ($tiene_costo_medios && isset($m['costo']) && $m['costo'] !== "") {
            $valor = $m['costo'];
        } elseif ($tiene_tarifa_medios && isset($m['tarifa']) && $m['tarifa'] !== "") {
            $valor = $m['tarifa'];
        }

        $fecha_registro = "—";
        if ($tiene_fecha_medios && !empty($m['fecha_creacion'])) {
            $fecha_registro = date("d/m/Y", strtotime($m['fecha_creacion']));
        } elseif (!empty($m['fecha_registro'])) {
            $fecha_registro = date("d/m/Y", strtotime($m['fecha_registro']));
        } elseif (!empty($m['created_at'])) {
            $fecha_registro = date("d/m/Y", strtotime($m['created_at']));
        }

        $noticias_count = 0;
        if ($nombre !== "") {
            $nombre_sql = $conn->real_escape_string($nombre);
            $q_count = $conn->query("SELECT COUNT(*) AS total FROM notas WHERE subtipo_medio LIKE '%$nombre_sql%'");
            if ($q_count) {
                $c = $q_count->fetch_assoc();
                $noticias_count = intval($c['total'] ?? 0);
            }
        }

        $clase_tipo = "tipo-DOC";
        $tipo_upper = mb_strtoupper($tipo, 'UTF-8');
        if (strpos($tipo_upper, 'RADIO') !== false) { $clase_tipo = "tipo-RAD"; }
        elseif (strpos($tipo_upper, 'WEB') !== false || strpos($tipo_upper, 'PÁGINA') !== false || strpos($tipo_upper, 'PAGINA') !== false) { $clase_tipo = "tipo-WEB"; }
        elseif (strpos($tipo_upper, 'RED') !== false) { $clase_tipo = "tipo-RED"; }
        elseif (strpos($tipo_upper, 'TELE') !== false || strpos($tipo_upper, 'TV') !== false) { $clase_tipo = "tipo-TEL"; }
        elseif (strpos($tipo_upper, 'DIARIO') !== false || strpos($tipo_upper, 'PRENSA') !== false) { $clase_tipo = "tipo-DIA"; }

        $medios[] = [
            "id" => intval($m['id']),
            "nombre" => $nombre,
            "tipo" => $tipo,
            "region" => $region,
            "provincia" => $provincia,
            "ciudad" => $ciudad,
            "valor" => $valor,
            "frecuencia" => $m['frecuencia'] ?? '',
            "url" => $m['url'] ?? '',
            "estado" => $m['estado'] ?? 'activo',
            "noticias" => $noticias_count,
            "registro" => $fecha_registro,
            "clase_tipo" => $clase_tipo
        ];
    }
}

/* ===== TONOS ===== */
$tonos = [];

$sql = "SELECT *
        FROM tonos
        WHERE estado='activo'
        ORDER BY
            CASE nombre
                WHEN 'Negativo' THEN 1
                WHEN 'Neutral' THEN 2
                WHEN 'Positivo' THEN 3
                ELSE 4
            END,
            nombre ASC";
$res = $conn->query($sql);

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

/* ===== ETIQUETAS ===== */
$etiquetas = [];
$filtro_archivadas = isset($_GET['archivadas']) && $_GET['archivadas'] == '1';
$buscar_etiquetas = trim((string)($_GET['buscar_etiquetas'] ?? ''));
$where_estado_etiquetas = $filtro_archivadas ? "estado='archivado'" : "estado='activo'";
$sql_etiquetas = "SELECT * FROM etiquetas WHERE $where_estado_etiquetas";

if ($buscar_etiquetas !== '') {
    $terminos = array_values(array_filter(array_map('trim', explode(',', $buscar_etiquetas)), function($v){
        return $v !== '';
    }));

    if (count($terminos) > 0) {
        $condiciones = [];
        foreach ($terminos as $termino) {
            $termino_sql = $conn->real_escape_string($termino);
            $condiciones[] = "nombre LIKE '%$termino_sql%'";
        }
        $sql_etiquetas .= ' AND (' . implode(' OR ', $condiciones) . ')';
    }
}

$sql_etiquetas .= ' ORDER BY nombre ASC';
$q_etiquetas = $conn->query($sql_etiquetas);
if ($q_etiquetas) {
    while ($row = $q_etiquetas->fetch_assoc()) {
        $etiquetas[] = $row;
    }
}
?>

<style>
/* ==========================================================
   CONFIGURACIÓN - COPIA VISUAL DEL MÓDULO ORIGINAL
========================================================== */
.main{margin-left:96px !important;width:calc(100% - 96px) !important;background:#fff !important;}
.cfg-color-code{
    display:inline-flex;
    min-width:86px;
    height:30px;
    padding:0 11px;
    align-items:center;
    justify-content:center;
    border-radius:10px;
    color:#fff;
    font-size:15px;
    font-weight:800;
    text-transform:lowercase;
}
.cfg-page{display:flex;min-height:100vh;background:#fff;color:#1e2942;font-family:Arial,sans-serif;}
.cfg-sidebar{width:305px;min-width:305px;border-right:1px solid #e3e5ef;background:#fff;padding:34px 30px;}
.cfg-title small{display:block;color:#9aa0b5;font-size:12px;text-transform:uppercase;font-weight:700;letter-spacing:.25px;line-height:1;}
.cfg-title h1{font-size:30px;line-height:1.05;margin:4px 0 34px;color:#1e2942;font-weight:800;}
.cfg-filter{margin-bottom:23px;}
.cfg-filter label{display:block;font-size:15px;font-weight:700;color:#1e2942;margin-bottom:8px;}
.cfg-select,.cfg-input{width:100%;height:58px;border:1px solid #d9dce8;border-radius:7px;background:#fff;color:#1e2942;font-size:17px;padding:0 18px;outline:none;appearance:auto;}
.cfg-filter-btn{width:100%;height:58px;border:1px solid #dfe2ec;border-radius:7px;background:#f0f1f8;color:#9aa0b5;font-weight:800;font-size:14px;text-transform:uppercase;cursor:pointer;margin-top:4px;}
.cfg-main{flex:1;min-width:0;background:#fff;}
.cfg-tabs{height:74px;border-bottom:1px solid #e3e5ef;display:flex;align-items:flex-end;gap:30px;padding:0 34px;background:#fff;}
.cfg-tabs a{display:block;text-decoration:none;color:#9aa0b5;font-size:19px;padding-bottom:14px;line-height:1;}
.cfg-tabs a.active{color:#1e2942;border-bottom:2px solid #1e2942;}
.cfg-toolbar{height:96px;display:flex;align-items:flex-start;justify-content:space-between;padding:34px 34px 0;}
.cfg-actions{position:relative;display:inline-block;}
.cfg-actions-btn{height:58px;min-width:132px;border:1px solid #dfe2ec;border-radius:7px;background:#f7f7fb;color:#9aa0b5;font-size:15px;font-weight:800;text-transform:uppercase;cursor:pointer;padding:0 22px;}
.cfg-actions-menu{display:none;position:absolute;left:0;top:60px;width:190px;background:#fff;border:1px solid #dfe2ec;box-shadow:0 8px 18px rgba(0,0,0,.08);border-radius:4px;z-index:30;padding:8px 0;}
.cfg-actions-menu.show{display:block;}
.cfg-actions-menu button{width:100%;height:42px;border:0;background:#fff;text-align:left;padding:0 18px;color:#1e2942;font-size:14px;cursor:pointer;}
.cfg-actions-menu button:hover{background:#fff0ea;color:#ff6748;}
.cfg-create-btn{height:58px;border:0;border-radius:7px;background:#ff6748;color:#fff;font-size:15px;font-weight:800;text-transform:uppercase;text-decoration:none;display:flex;align-items:center;justify-content:center;padding:0 22px;min-width:174px;cursor:pointer;}
.cfg-create-btn:hover{background:#ef5124;}
.cfg-content{padding:0 34px 44px;}
.cfg-message{margin:0 34px 22px;padding:14px 18px;border-radius:8px;background:#fff0ea;color:#d9431b;font-weight:700;}
.cfg-grid{display:grid;grid-template-columns:repeat(4,minmax(235px,1fr));gap:28px;}
.cfg-card{height:220px;border:1px solid #dfe2ec;border-radius:15px;background:#fff;position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;}
.cfg-card.selected{border:2px solid #ff8f78;box-shadow:0 0 0 1px rgba(255,103,72,.10);}
.cfg-card-check{position:absolute;right:22px;top:22px;width:22px;height:22px;border:1px solid #bfc3cf;border-radius:4px;accent-color:#ff6748;z-index:2;}
.cfg-card-body{padding:25px 58px 16px 24px;min-height:156px;}
.cfg-card-title{display:block;color:#ff6748;font-size:18px;font-weight:800;line-height:1.35;text-decoration:underline;margin-bottom:9px;}
.cfg-card-data{list-style:none;margin:0;padding:0;color:#1e2942;}
.cfg-card-data li{font-size:15px;line-height:1.35;color:#9aa0b5;margin-bottom:2px;}
.cfg-card-data li.tipo{font-size:12px;font-weight:900;text-transform:uppercase;color:#1e2942;margin-bottom:4px;}
.cfg-card-data li.tipo:before{display:inline-block;margin-right:5px;color:#1e2942;font-size:13px;}
.cfg-card-data li.tipo-RAD:before{content:'🎙';}
.cfg-card-data li.tipo-WEB:before{content:'🌐';}
.cfg-card-data li.tipo-RED:before{content:'🔗';}
.cfg-card-data li.tipo-TEL:before{content:'📺';}
.cfg-card-data li.tipo-DIA:before{content:'📰';}
.cfg-card-data li.valor{color:#1e2942;}
.cfg-card-footer{height:60px;border-top:1px solid #dfe2ec;background:#fff;}
.cfg-card-footer ul{height:100%;display:flex;list-style:none;margin:0;padding:0;}
.cfg-card-footer li{width:50%;padding:12px 24px;}
.cfg-card-footer small{display:block;color:#9aa0b5;font-size:11px;font-weight:900;text-transform:uppercase;margin-bottom:3px;}
.cfg-card-footer span{display:block;color:#9aa0b5;font-size:15px;}
.cfg-empty{padding:50px;text-align:center;color:#9aa0b5;border:1px dashed #dfe2ec;border-radius:14px;background:#fff;}
/* ETIQUETAS */
.cfg-tag-grid{display:grid;grid-template-columns:repeat(4,minmax(235px,1fr));gap:28px;}
.cfg-tag-card{height:132px;border:1px solid #dfe2ec;border-radius:15px;background:#fff;position:relative;overflow:hidden;}
.cfg-tag-card h3{padding:28px 55px 16px 24px;color:#ff6748;font-size:18px;font-weight:800;text-decoration:underline;line-height:1.3;}
.cfg-tag-footer{border-top:1px solid #dfe2ec;padding:12px 24px;}
.cfg-tag-footer small{display:block;color:#9aa0b5;font-size:11px;font-weight:900;text-transform:uppercase;}
.cfg-tag-footer span{color:#9aa0b5;font-size:15px;}
/* TONOS */
.cfg-tonos-table{width:100%;border-collapse:collapse;min-width:760px;}
.cfg-tonos-table th{color:#9aa0b5;font-size:13px;text-transform:uppercase;text-align:left;font-weight:800;padding:18px 12px;border-bottom:1px solid #e3e5ef;}
.cfg-tonos-table td{padding:18px 12px;border-bottom:1px solid #f0f1f6;color:#1e2942;font-size:17px;vertical-align:middle;}
.cfg-color{display:inline-block;width:96px;height:28px;border-radius:20px;}
.cfg-color.pos{background:#27ae60;}.cfg-color.neg{background:#e74c3c;}.cfg-color.neu{background:#f2c94c;}
    
#tono_color_selector{
    -webkit-appearance:none;
    appearance:none;
    border-radius:50%;
    overflow:hidden;
}

#tono_color_selector::-webkit-color-swatch-wrapper{
    padding:0;
}

#tono_color_selector::-webkit-color-swatch{
    border:none;
    border-radius:50%;
}

#tono_color_selector::-moz-color-swatch{
    border:none;
    border-radius:50%;
}
    
/* MODAL */
.cfg-modal-bg{display:none;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:500;align-items:center;justify-content:center;}
.cfg-modal-bg.show{display:flex;}
.cfg-modal{width:720px;max-width:92vw;background:#fff;border-radius:14px;box-shadow:0 15px 40px rgba(0,0,0,.25);padding:28px;color:#1e2942;}
.cfg-modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px;}
.cfg-modal-head h2{font-size:26px;color:#1e2942;}
.cfg-close{border:0;background:#f0f1f8;width:38px;height:38px;border-radius:50%;cursor:pointer;font-size:18px;}
.cfg-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;}
.cfg-form-field label{display:block;font-size:14px;font-weight:800;margin-bottom:7px;color:#1e2942;}
.cfg-modal .cfg-create-btn{width:100%;margin-top:22px;}
@media(max-width:1400px){.cfg-grid,.cfg-tag-grid{grid-template-columns:repeat(3,minmax(235px,1fr));}}
@media(max-width:1050px){.cfg-page{flex-direction:column}.cfg-sidebar{width:100%;min-width:0;border-right:0;border-bottom:1px solid #e3e5ef}.cfg-grid,.cfg-tag-grid{grid-template-columns:repeat(2,minmax(235px,1fr));}}
@media(max-width:650px){.cfg-grid,.cfg-tag-grid{grid-template-columns:1fr}.cfg-toolbar{height:auto;gap:16px;align-items:flex-start;flex-direction:column;padding-bottom:25px}.cfg-create-btn{width:100%;}.cfg-form-grid{grid-template-columns:1fr;}}

.cfg-select-all-btn{
    display:none;
    height:58px;
    min-width:170px;
    margin-left:14px;
    border:1px solid #ff6748;
    border-radius:7px;
    background:#fff;
    color:#ff6748;
    font-size:14px;
    font-weight:800;
    text-transform:uppercase;
    cursor:pointer;
    padding:0 20px;
}
.cfg-select-all-btn.show{
    display:inline-flex;
    align-items:center;
    justify-content:center;
}
.cfg-select-all-btn.active{
    background:#ff6748;
    color:#fff;
}

.cfg-toolbar-left{display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap;}
.cfg-archive-btn{height:58px;border:1px solid #dfe2ec;border-radius:7px;background:#fff;color:#1e2942;font-size:14px;font-weight:800;text-transform:uppercase;text-decoration:none;display:inline-flex;align-items:center;padding:0 20px;}
.cfg-archive-btn.active{background:#ff6748;color:#fff;border-color:#ff6748;}
.cfg-tag-search{display:flex;gap:8px;align-items:center;}
.cfg-tag-search .cfg-input{width:330px;height:58px;}
.cfg-tag-search button{height:58px;min-width:105px;border:0;border-radius:7px;background:#ff6748;color:#fff;font-weight:800;text-transform:uppercase;cursor:pointer;}
.cfg-tag-card.selected{border:2px solid #ff8f78;box-shadow:0 0 0 1px rgba(255,103,72,.10);}
@media(max-width:900px){.cfg-tag-search{width:100%;}.cfg-tag-search .cfg-input{width:100%;}.cfg-toolbar-left{width:100%;}}
</style>

<div class="cfg-page">
    <aside class="cfg-sidebar">
        <div class="cfg-title">
            <small>CONFIGURACIÓN</small>
            <h1><?php echo ($cfg=='medios'?'Medios':($cfg=='tonos'?'Tonos':'Etiquetas')); ?></h1>
        </div>

        <?php if($cfg == 'medios'){ ?>
            <form method="GET">
                <input type="hidden" name="modulo" value="configuracion">
                <input type="hidden" name="cfg" value="medios">
                <?php if($filtro_archivados_medios){ ?>
                    <input type="hidden" name="archivados_medios" value="1">
                <?php } ?>

                <div class="cfg-filter">
                    <label>Tipo de Medio</label>
                    <select class="cfg-select" name="tipo_medio">
                        <option value="">Todos</option>
                        <?php foreach($tipos_medios as $tipo_op){ ?>
                            <option value="<?php echo cfg_h($tipo_op); ?>" <?php if($filtro_tipo == $tipo_op) echo "selected"; ?>>
                                <?php echo cfg_h($tipo_op); ?>
                            </option>
                        <?php } ?>
                    </select>
                </div>

                <div class="cfg-filter">
                    <label>Departamento</label>
                    <select class="cfg-select" name="region">
                        <option value="">Todos</option>
                        <?php foreach($regiones_medios as $reg_op){ ?>
                            <option value="<?php echo cfg_h($reg_op); ?>" <?php if($filtro_region == $reg_op) echo "selected"; ?>>
                                <?php echo cfg_h($reg_op); ?>
                            </option>
                        <?php } ?>
                    </select>
                </div>

                <div class="cfg-filter">
<label>Provincia</label><select class="cfg-select" name="provincia"><option value="">Todas</option><?php foreach($provincias_medios as $p){ ?><option value="<?php echo cfg_h($p); ?>" <?php if($filtro_provincia==$p) echo "selected"; ?>><?php echo cfg_h($p); ?></option><?php } ?></select></div>
<div class="cfg-filter"><label>Búsqueda</label><input class="cfg-select" type="text" name="buscar" value="<?php echo cfg_h($filtro_busqueda); ?>" placeholder="Nombre, ciudad, frecuencia..."></div>
<button type="submit" class="cfg-filter-btn">APLICAR FILTROS</button>
<button type="button"
        class="cfg-filter-btn"
        style="margin-top:10px;background:#fff;color:#ff6748;border:1px solid #ff6748;"
        onclick="window.location.href='dashboard_superadmin.php?modulo=configuracion&cfg=medios<?php echo $filtro_archivados_medios ? '&archivados_medios=1' : ''; ?>'">
    LIMPIAR FILTROS
</button>
            </form>
        <?php } ?>
    </aside>

    <section class="cfg-main">
        <nav class="cfg-tabs">
            <a href="dashboard_superadmin.php?modulo=configuracion&cfg=medios" class="<?php echo $cfg=='medios'?'active':''; ?>">Medios</a>
            <a href="dashboard_superadmin.php?modulo=configuracion&cfg=tonos" class="<?php echo $cfg=='tonos'?'active':''; ?>">Tonos</a>
            <a href="dashboard_superadmin.php?modulo=configuracion&cfg=etiquetas" class="<?php echo $cfg=='etiquetas'?'active':''; ?>">Etiquetas</a>
        </nav>

        <?php if($mensaje_cfg != ""){ ?>
            <div class="cfg-message"><?php echo cfg_h($mensaje_cfg); ?></div>
        <?php } ?>

        <?php if($cfg === 'etiquetas'){ ?>
            <form method="GET" id="form_buscar_etiquetas">
                <input type="hidden" name="modulo" value="configuracion">
                <input type="hidden" name="cfg" value="etiquetas">
                <?php if($filtro_archivadas){ ?><input type="hidden" name="archivadas" value="1"><?php } ?>
            </form>
        <?php } ?>

        <form method="POST" id="form_cfg_acciones">
            <input type="hidden" name="cfg_accion" id="cfg_accion" value="">
            <?php if($cfg === 'medios'){ ?>
                <input type="hidden"
                       name="vista_archivados_medios"
                       value="<?php echo $filtro_archivados_medios ? '1' : '0'; ?>">
            <?php } ?>
            <?php if($cfg === 'etiquetas'){ ?>
                <input type="hidden" name="vista_archivadas" value="<?php echo $filtro_archivadas ? '1' : '0'; ?>">
            <?php } ?>

            <div class="cfg-toolbar">
                <div class="cfg-toolbar-left">
                    <div class="cfg-actions">
                        <button type="button" class="cfg-actions-btn" onclick="toggleCfgAcciones(event)">ACCIONES⌄</button>
                        <div class="cfg-actions-menu" id="cfgActionsMenu">
                            <?php if($cfg=='medios'){ ?>
                                <?php if(!$filtro_archivados_medios){ ?>
                                    <button type="button" onclick="cfgAccionMasiva('archivar_medios')">Archivar</button>
                                <?php } else { ?>
                                    <button type="button" onclick="cfgAccionMasiva('desarchivar_medios')">Desarchivar</button>
                                <?php } ?>
                                <button type="button" onclick="cfgAccionMasiva('eliminar_medios')">Eliminar</button>
                                <?php if(!$filtro_archivados_medios){ ?>
                                    <button type="button" onclick="abrirModalImportarExcel()">Subir medios (Excel)</button>
                                <?php } ?>
                            <?php } elseif($cfg === 'tonos'){ ?>
                                <button type="button" onclick="cfgAccionTonos('archivar_tonos')">Archivar</button>
                                <button type="button" onclick="cfgAccionTonos('eliminar_tonos')">Eliminar</button>
                            <?php } elseif($cfg === 'etiquetas'){ ?>
                                <?php if(!$filtro_archivadas){ ?>
                                    <button type="button" onclick="cfgAccionEtiquetas('archivar_etiquetas')">Archivar</button>
                                <?php } else { ?>
                                    <button type="button" onclick="cfgAccionEtiquetas('desarchivar_etiquetas')">Desarchivar</button>
                                <?php } ?>
                                <button type="button" onclick="cfgAccionEtiquetas('eliminar_etiquetas')">Eliminar</button>
                            <?php } ?>
                        </div>
                    </div>

                    <?php if($cfg === 'medios'){ ?>
                        <a class="cfg-archive-btn <?php echo $filtro_archivados_medios ? 'active' : ''; ?>"
                           href="dashboard_superadmin.php?modulo=configuracion&cfg=medios<?php echo $filtro_archivados_medios ? '' : '&archivados_medios=1'; ?>">
                            <?php echo $filtro_archivados_medios ? 'ACTIVOS' : 'ARCHIVADOS'; ?>
                        </a>
                    <?php } ?>

                    <?php if($cfg === 'etiquetas'){ ?>
                        <a class="cfg-archive-btn <?php echo $filtro_archivadas ? 'active' : ''; ?>"
                           href="dashboard_superadmin.php?modulo=configuracion&cfg=etiquetas<?php echo $filtro_archivadas ? '' : '&archivadas=1'; ?>">
                            <?php echo $filtro_archivadas ? 'ACTIVAS' : 'ARCHIVADAS'; ?>
                        </a>

                        <div class="cfg-tag-search">
                            <input class="cfg-input"
                                   type="text"
                                   name="buscar_etiquetas"
                                   form="form_buscar_etiquetas"
                                   value="<?php echo cfg_h($buscar_etiquetas); ?>"
                                   placeholder="ACP, AFP, AGAP...">
                            <button type="submit" form="form_buscar_etiquetas">BUSCAR</button>
                        </div>
                    <?php } ?>

                    <button type="button"
                            id="btnSeleccionarTodosMedios"
                            class="cfg-select-all-btn"
                            onclick="cfgSeleccionarTodosMedios()">
                        SELECCIONAR TODOS
                    </button>

                    <?php if($cfg === 'etiquetas'){ ?>
                        <button type="button"
                                id="btnSeleccionarTodasEtiquetas"
                                class="cfg-select-all-btn"
                                onclick="cfgSeleccionarTodasEtiquetas()">
                            SELECCIONAR TODAS
                        </button>
                    <?php } ?>
                </div>

                <?php if($cfg=='medios' && !$filtro_archivados_medios){ ?>
                    <button type="button" class="cfg-create-btn" onclick="abrirModalMedio()">+ CREAR MEDIO</button>
                <?php } ?>
                <?php if($cfg=='tonos'){ ?>
                    <button type="button" class="cfg-create-btn" onclick="abrirModalTono()">+ CREAR TONO</button>
                <?php } ?>
                <?php if($cfg=='etiquetas'){ ?>
                    <button type="button" class="cfg-create-btn" onclick="abrirModalEtiqueta()">+ CREAR ETIQUETA</button>
                <?php } ?>
            </div>

            <div class="cfg-content">
                <?php if($cfg == 'medios'){ ?>
                    <?php if(count($medios) > 0){ ?>
                        <div class="cfg-grid">
                            <?php foreach($medios as $m){ ?>
                                <article class="cfg-card" id="cfg_card_<?php echo intval($m['id']); ?>">
                                    <input
                                        type="checkbox"
                                        class="cfg-card-check"
                                        name="medios_ids[]"
                                        value="<?php echo intval($m['id']); ?>"
                                        onchange="cfgActualizarSeleccionMedios(); cfgMarcarTarjeta(this)">
<div class="cfg-card-body">
                                        <a href="#" class="cfg-card-title" onclick='abrirModalEditarMedio(<?php echo json_encode($m, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); ?>); return false;'><?php echo cfg_h($m['nombre']); ?></a>
                                        <ul class="cfg-card-data">
                                            <li class="tipo <?php echo cfg_h($m['clase_tipo']); ?>"><?php echo cfg_h($m['tipo']); ?></li>
                                            <li>Ubicado en <?php echo cfg_h($m['region']); ?></li>
                                            <li class="valor">Valor: <?php echo cfg_h($m['valor']); ?></li>
                                        </ul>
                                    </div>
                                    <footer class="cfg-card-footer">
                                        <ul>
                                            <li><small>NOTICIAS</small><span><?php echo intval($m['noticias']); ?></span></li>
                                            <li><small>REGISTRO</small><span><?php echo cfg_h($m['registro']); ?></span></li>
                                        </ul>
                                    </footer>
                                </article>
                            <?php } ?>
                        </div>
                    <?php } else { ?>
                        <div class="cfg-empty">
    <?php echo $filtro_archivados_medios
        ? 'No hay medios archivados.'
        : 'Aún no hay medios registrados. Usa + CREAR MEDIO o ACCIONES → Subir medios (Excel).'; ?>
</div>
                    <?php } ?>
                <?php } ?>

                <?php if($cfg == 'tonos'){ ?>
    <table class="cfg-tonos-table">
        <thead>
            <tr>
                <th style="width:55px;"></th>
                <th>TONO</th>
                <th>COLOR</th>
            </tr>
        </thead>

        <tbody>
            <?php foreach($tonos as $t){ ?>
                <tr>
                    <td>
                        <input
                            type="checkbox"
                            class="check"
                            name="tonos_ids[]"
                            value="<?php echo intval($t['id']); ?>">
                    </td>

                    <td>
                        <a href="#"
                           onclick='abrirModalTono(
                               <?php echo intval($t['id']); ?>,
                               <?php echo json_encode($t['nombre'], JSON_UNESCAPED_UNICODE); ?>,
                               <?php echo json_encode($t['color']); ?>
                           ); return false;'
                           style="color:#ff6748;font-weight:bold;text-decoration:underline;">

                            <?php echo cfg_h($t['nombre']); ?>
                        </a>
                    </td>

                    <td>
                        <span class="cfg-color-code"
                              style="background:<?php echo cfg_h($t['color']); ?>;">
                            <?php echo cfg_h($t['color']); ?>
                        </span>
                    </td>
                </tr>
            <?php } ?>
        </tbody>
    </table>
<?php } ?>

                <?php if($cfg == 'etiquetas'){ ?>
                    <?php if(count($etiquetas) > 0){ ?>
                        <div class="cfg-tag-grid">
                            <?php foreach($etiquetas as $e){ ?>
                                <article class="cfg-tag-card" id="cfg_tag_<?php echo intval($e['id']); ?>">
                                    <input type="checkbox"
                                           class="cfg-card-check"
                                           name="etiquetas_ids[]"
                                           value="<?php echo intval($e['id']); ?>"
                                           onchange="cfgActualizarSeleccionEtiquetas(); cfgMarcarEtiqueta(this)">

                                    <h3>
<a href="#"
   onclick='abrirEditarEtiqueta(
        <?php echo intval($e["id"]); ?>,
        <?php echo json_encode($e["nombre"], JSON_UNESCAPED_UNICODE); ?>
   ); return false;'
   style="color:#ff6748;text-decoration:underline;">
    <?php echo cfg_h($e["nombre"]); ?>
</a>
</h3>

                                    <div class="cfg-tag-footer">
                                        <small>ESTADO</small>
                                        <span><?php echo $e['estado'] === 'archivado' ? 'Archivada' : 'Activa'; ?></span>
                                    </div>
                                </article>
                            <?php } ?>
                        </div>
                    <?php } else { ?>
                        <div class="cfg-empty">
                            <?php echo $filtro_archivadas ? 'No hay etiquetas archivadas.' : 'No hay etiquetas registradas.'; ?>
                        </div>
                    <?php } ?>
                <?php } ?>
            </div>
        </form>
    </section>
</div>

<div class="cfg-modal-bg" id="modalMedio">
    <div class="cfg-modal">
        <div class="cfg-modal-head">
            <h2>Crear medio</h2>
            <button type="button" class="cfg-close" onclick="cerrarModalMedio()">×</button>
        </div>

        <form method="POST">
            <input type="hidden" name="cfg_accion" value="crear_medio">

            <div class="cfg-form-grid">
                <div class="cfg-form-field">
                    <label>Departamento</label>
                    <input class="cfg-input" type="text" name="region" required>
                </div>

                <div class="cfg-form-field">
                    <label>Provincia</label>
                    <input class="cfg-input" type="text" name="provincia" required>
                </div>

                <div class="cfg-form-field">
                    <label>Ciudad</label>
                    <input class="cfg-input" type="text" name="ciudad" required>
                </div>

                <div class="cfg-form-field">
                    <label>Tipo de medio</label>
                    <select class="cfg-select" name="tipo_medio" required>
                        <option value="">Seleccionar...</option>
                        <option value="Prensa">Prensa</option>
                        <option>Radio</option>
                        <option>Redes Sociales</option>
                        <option>Televisión</option>
                        <option value="Página Web">Página Web</option>
                    </select>
                </div>

                <div class="cfg-form-field" style="grid-column:1/-1;">
                    <label>Nombre del medio</label>
                    <input class="cfg-input" type="text" name="nombre_medio" required>
                </div>
            </div>

            <button type="submit" class="cfg-create-btn">GUARDAR MEDIO</button>
        </form>
    </div>
</div>



<div class="cfg-modal-bg" id="modalEditarMedio">
    <div class="cfg-modal">
        <div class="cfg-modal-head">
            <h2>Actualizar medio</h2>
            <button type="button" class="cfg-close" onclick="cerrarModalEditarMedio()">×</button>
        </div>

        <form method="POST">
            <input type="hidden" name="cfg_accion" value="actualizar_medio">
            <input type="hidden" name="medio_id" id="edit_medio_id">

            <div class="cfg-form-grid">
                <div class="cfg-form-field">
                    <label>Tipo de medio</label>
                    <select class="cfg-select" name="tipo_medio" id="edit_tipo_medio" required>
                        <option value="">Seleccionar...</option>
                        <option value="Prensa">Prensa</option>
                        <option value="Radio">Radio</option>
                        <option value="Televisión">Televisión</option>
                        <option value="Página Web">Página Web</option>
                        <option value="Redes Sociales">Redes Sociales</option>
                    </select>
                </div>

                <div class="cfg-form-field">
                    <label>Nombre del medio</label>
                    <input class="cfg-input" type="text" name="nombre_medio" id="edit_nombre_medio" required>
                </div>

                <div class="cfg-form-field">
                    <label>Departamento</label>
                    <input class="cfg-input" type="text" name="region" id="edit_region" required>
                </div>

                <div class="cfg-form-field">
                    <label>Provincia</label>
                    <input class="cfg-input" type="text" name="provincia" id="edit_provincia" required>
                </div>

                <div class="cfg-form-field">
                    <label>Ciudad</label>
                    <input class="cfg-input" type="text" name="ciudad" id="edit_ciudad" required>
                </div>

                <div class="cfg-form-field">
                    <label>Frecuencia</label>
                    <input class="cfg-input" type="text" name="frecuencia" id="edit_frecuencia">
                </div>

                <div class="cfg-form-field">
                    <label>Valor</label>
                    <input class="cfg-input" type="text" name="valor" id="edit_valor">
                </div>

                <div class="cfg-form-field">
                    <label>Estado</label>
                    <select class="cfg-select" name="estado" id="edit_estado">
                        <option value="activo">Activo</option>
                        <option value="inactivo">Archivado</option>
                    </select>
                </div>

                <div class="cfg-form-field" style="grid-column:1/-1;">
                    <label>URL</label>
                    <input class="cfg-input" type="url" name="url" id="edit_url">
                </div>
            </div>

            <button type="submit" class="cfg-create-btn">ACTUALIZAR MEDIO</button>
        </form>
    </div>
</div>

<div class="cfg-modal-bg" id="modalImportarExcel">
    <div class="cfg-modal">
        <div class="cfg-modal-head">
            <h2>Subir medios desde Excel</h2>
            <button type="button" class="cfg-close" onclick="cerrarModalImportarExcel()">×</button>
        </div>

        <form method="POST" enctype="multipart/form-data" onsubmit="mostrarCargandoImportacion()">
            <input type="hidden" name="cfg_accion" value="importar_excel">

            <div class="cfg-form-field">
                <label>Archivo Excel (.xlsx)</label>
                <input class="cfg-input" type="file" name="archivo_excel" accept=".xlsx" required>
            </div>

            <p style="margin-top:14px;color:#777e90;line-height:1.5;">
                Columnas esperadas: TIPO, REGION, PROVINCIA, CIUDAD, MEDIO, FRECUENCIA, VALOR, URL y ESTADO.
            </p>

            <button type="submit" class="cfg-create-btn" id="btnImportarExcel">IMPORTAR EXCEL</button>
        </form>
    </div>
</div>

<div class="cfg-modal-bg" id="modalTono">
    <div class="cfg-modal">
        <div class="cfg-modal-head">
            <h2>Registrar tono</h2>
            <button type="button" class="cfg-close" onclick="cerrarModalTono()">×</button>
        </div>

        <form method="POST">
            <input type="hidden" name="cfg_accion" value="guardar_tono">
            <input type="hidden" name="tono_id" id="tono_id">

            <div class="cfg-form-field">
                <label>Nombre del tono</label>
                <input class="cfg-input" type="text" name="nombre" id="tono_nombre" required>
            </div>

            <div class="cfg-form-field">
                <label>Color *</label>

                <div style="display:flex;align-items:center;gap:12px;">
                    <input
                        type="color"
                        id="tono_color_selector"
                        value="#30d020"
                        style="width:42px;height:42px;border:none;border-radius:50%;overflow:hidden;cursor:pointer;background:none;padding:0;">

                    <input
                        class="cfg-input"
                        type="text"
                        name="color"
                        id="tono_color"
                        value="#30d020"
                        required
                        style="flex:1;">
                </div>
            </div>

            <button type="submit" class="cfg-create-btn">
                GUARDAR TONO
            </button>
        </form>
    </div>
</div>


<div class="cfg-modal-bg" id="modalEtiqueta">
    <div class="cfg-modal">
        <div class="cfg-modal-head">
            <h2>Registrar etiqueta</h2>
            <button type="button" class="cfg-close" onclick="cerrarModalEtiqueta()">×</button>
        </div>

        <form method="POST">
            <input type="hidden" name="cfg_accion" value="guardar_etiqueta">
            <input type="hidden" name="etiqueta_id" id="etiqueta_id" value="">

            <div class="cfg-form-field">
                <label>Descripción *</label>
                <input class="cfg-input"
                       type="text"
                       name="nombre_etiqueta"
                       id="nombre_etiqueta"
                       placeholder="Nombre de la etiqueta"
                       required>
            </div>

            <button type="submit" class="cfg-create-btn">REGISTRAR ETIQUETA</button>
        </form>
    </div>
</div>

<script>

function cfgMarcarTarjeta(check){
    var card = check.closest('.cfg-card');
    if(card){
        card.classList.toggle('selected', check.checked);
    }
}

function abrirModalEditarMedio(medio){
    document.getElementById('edit_medio_id').value = medio.id || '';
    document.getElementById('edit_tipo_medio').value = medio.tipo || '';
    document.getElementById('edit_nombre_medio').value = medio.nombre || '';
    document.getElementById('edit_region').value = medio.region || '';
    document.getElementById('edit_provincia').value = medio.provincia || '';
    document.getElementById('edit_ciudad').value = medio.ciudad || '';
    document.getElementById('edit_frecuencia').value = medio.frecuencia || '';
    document.getElementById('edit_valor').value = (medio.valor === '—' ? '' : (medio.valor || ''));
    document.getElementById('edit_url').value = medio.url || '';
    document.getElementById('edit_estado').value = medio.estado || 'activo';
    document.getElementById('modalEditarMedio').classList.add('show');
}

function cerrarModalEditarMedio(){
    document.getElementById('modalEditarMedio').classList.remove('show');
}

function toggleCfgAcciones(e){
    if(e){ e.stopPropagation(); }
    var menu = document.getElementById("cfgActionsMenu");
    if(menu){ menu.classList.toggle("show"); }
}

function abrirModalImportarExcel(){
    var menu = document.getElementById("cfgActionsMenu");
    if(menu){ menu.classList.remove("show"); }
    document.getElementById("modalImportarExcel").classList.add("show");
}

function cerrarModalImportarExcel(){
    document.getElementById("modalImportarExcel").classList.remove("show");
}

function mostrarCargandoImportacion(){
    var btn = document.getElementById("btnImportarExcel");
    if(btn){
        btn.disabled = true;
        btn.innerHTML = "IMPORTANDO...";
    }
}

document.addEventListener("click", function(e){
    var box = document.querySelector(".cfg-actions");
    var menu = document.getElementById("cfgActionsMenu");
    if(box && menu && !box.contains(e.target)){
        menu.classList.remove("show");
    }
});

function abrirModalMedio(){
    document.getElementById("modalMedio").classList.add("show");
}

function cerrarModalMedio(){
    document.getElementById("modalMedio").classList.remove("show");
}

function cfgAccionMasiva(accion){
    var seleccionados = document.querySelectorAll('input[name="medios_ids[]"]:checked');
    if(seleccionados.length === 0){
        alert("Primero selecciona uno o más medios.");
        return;
    }

    if(accion === "eliminar_medios"){
        if(!confirm("¿Eliminar los medios seleccionados?")){
            return;
        }
    }

    if(accion === "archivar_medios"){
        if(!confirm("¿Archivar los medios seleccionados?")){
            return;
        }
    }

    document.getElementById("cfg_accion").value = accion;
    document.getElementById("form_cfg_acciones").submit();
}

function cfgActualizarSeleccionMedios(){
    var checks = Array.from(document.querySelectorAll('input[name="medios_ids[]"]'));
    var seleccionados = checks.filter(function(chk){ return chk.checked; });
    var btn = document.getElementById('btnSeleccionarTodosMedios');

    if(!btn){ return; }

    if(seleccionados.length > 0){
        btn.classList.add('show');
    }else{
        btn.classList.remove('show');
        btn.classList.remove('active');
        btn.textContent = 'SELECCIONAR TODOS';
    }

    if(checks.length > 0 && seleccionados.length === checks.length){
        btn.classList.add('active');
        btn.textContent = 'QUITAR SELECCIÓN';
    }else{
        btn.classList.remove('active');
        btn.textContent = 'SELECCIONAR TODOS';
    }
}

function cfgSeleccionarTodosMedios(){
    var checks = Array.from(document.querySelectorAll('input[name="medios_ids[]"]'));
    if(checks.length === 0){ return; }

    var todosMarcados = checks.every(function(chk){ return chk.checked; });

    checks.forEach(function(chk){
        chk.checked = !todosMarcados;
        var tarjeta = chk.closest('.cfg-card');
        if(tarjeta){
            tarjeta.classList.toggle('selected', chk.checked);
        }
    });

    cfgActualizarSeleccionMedios();
}

document.addEventListener('DOMContentLoaded', function(){
    document.querySelectorAll('input[name="medios_ids[]"]').forEach(function(chk){
        chk.addEventListener('change', function(){
            var tarjeta = chk.closest('.cfg-card');
            if(tarjeta){
                tarjeta.classList.toggle('selected', chk.checked);
            }
            cfgActualizarSeleccionMedios();
        });
    });

    cfgActualizarSeleccionMedios();
});
    

function abrirModalTono(id='', nombre='', color='#30d020'){
    document.getElementById('tono_id').value = id;
    document.getElementById('tono_nombre').value = nombre;
    document.getElementById('tono_color').value = color;
    document.getElementById('tono_color_selector').value = color;

    var titulo = document.querySelector('#modalTono .cfg-modal-head h2');
    var boton = document.querySelector('#modalTono .cfg-create-btn');

    if(id){
        titulo.textContent = 'Actualizar tono';
        boton.textContent = 'ACTUALIZAR INFORMACIÓN';
    }else{
        titulo.textContent = 'Registrar tono';
        boton.textContent = 'REGISTRAR TONO';
    }

    document.getElementById('modalTono').classList.add('show');
}

function cerrarModalTono(){
    document.getElementById('modalTono').classList.remove('show');
}
    
function cfgAccionTonos(accion){
    var seleccionados = document.querySelectorAll(
        'input[name="tonos_ids[]"]:checked'
    );

    if(seleccionados.length === 0){
        alert("Primero selecciona uno o más tonos.");
        return;
    }

    if(accion === "eliminar_tonos"){
        if(!confirm("¿Eliminar los tonos seleccionados?")){
            return;
        }
    }

    if(accion === "archivar_tonos"){
        if(!confirm("¿Archivar los tonos seleccionados?")){
            return;
        }
    }

    document.getElementById("cfg_accion").value = accion;
    document.getElementById("form_cfg_acciones").submit();
}

document.addEventListener('DOMContentLoaded', function(){
    var selector = document.getElementById('tono_color_selector');
    var texto = document.getElementById('tono_color');

    if(selector && texto){
        selector.addEventListener('input', function(){
            texto.value = selector.value;
        });

        texto.addEventListener('input', function(){
            if(/^#[0-9a-fA-F]{6}$/.test(texto.value)){
                selector.value = texto.value;
            }
        });
    }
});    


function abrirModalEtiqueta(){

    document.getElementById('etiqueta_id').value='';

    document.getElementById('nombre_etiqueta').value='';

    document.querySelector('#modalEtiqueta h2').textContent='Registrar etiqueta';

    document.querySelector('#modalEtiqueta .cfg-create-btn').textContent='GUARDAR ETIQUETA';

    document.getElementById('modalEtiqueta').classList.add('show');

}
    
function abrirEditarEtiqueta(id,nombre){

    document.getElementById('etiqueta_id').value=id;
    document.getElementById('nombre_etiqueta').value=nombre;

    document.querySelector('#modalEtiqueta h2').textContent='Actualizar etiqueta';

    document.querySelector('#modalEtiqueta .cfg-create-btn').textContent='ACTUALIZAR ETIQUETA';

    document.getElementById('modalEtiqueta').classList.add('show');

    setTimeout(function(){
        document.getElementById('nombre_etiqueta').focus();
    },50);

}


function cerrarModalEtiqueta(){
    document.getElementById('modalEtiqueta').classList.remove('show');
}

function cfgMarcarEtiqueta(check){
    var card = check.closest('.cfg-tag-card');
    if(card){ card.classList.toggle('selected', check.checked); }
}

function cfgAccionEtiquetas(accion){
    var seleccionados = document.querySelectorAll('input[name="etiquetas_ids[]"]:checked');
    if(seleccionados.length === 0){
        alert('Primero selecciona una o más etiquetas.');
        return;
    }

    var pregunta = '¿Aplicar esta acción a las etiquetas seleccionadas?';
    if(accion === 'archivar_etiquetas') pregunta = '¿Archivar las etiquetas seleccionadas?';
    if(accion === 'desarchivar_etiquetas') pregunta = '¿Desarchivar las etiquetas seleccionadas?';
    if(accion === 'eliminar_etiquetas') pregunta = '¿Eliminar definitivamente las etiquetas seleccionadas?';
    if(!confirm(pregunta)) return;

    document.getElementById('cfg_accion').value = accion;
    document.getElementById('form_cfg_acciones').submit();
}

function cfgActualizarSeleccionEtiquetas(){
    var checks = Array.from(document.querySelectorAll('input[name="etiquetas_ids[]"]'));
    var seleccionados = checks.filter(function(chk){ return chk.checked; });
    var btn = document.getElementById('btnSeleccionarTodasEtiquetas');
    if(!btn) return;

    if(seleccionados.length > 0){
        btn.classList.add('show');
    }else{
        btn.classList.remove('show');
        btn.classList.remove('active');
        btn.textContent = 'SELECCIONAR TODAS';
    }

    if(checks.length > 0 && seleccionados.length === checks.length){
        btn.classList.add('active');
        btn.textContent = 'QUITAR SELECCIÓN';
    }else{
        btn.classList.remove('active');
        btn.textContent = 'SELECCIONAR TODAS';
    }
}

function cfgSeleccionarTodasEtiquetas(){
    var checks = Array.from(document.querySelectorAll('input[name="etiquetas_ids[]"]'));
    if(checks.length === 0) return;
    var todosMarcados = checks.every(function(chk){ return chk.checked; });

    checks.forEach(function(chk){
        chk.checked = !todosMarcados;
        cfgMarcarEtiqueta(chk);
    });
    cfgActualizarSeleccionEtiquetas();
}

document.addEventListener('DOMContentLoaded', function(){
    document.querySelectorAll('input[name="etiquetas_ids[]"]').forEach(function(chk){
        chk.addEventListener('change', cfgActualizarSeleccionEtiquetas);
    });
    cfgActualizarSeleccionEtiquetas();
});

</script>
