IBOGLAS 4.3 V2 — resellers (MAC + QR aislados)
==============================================

Subir estos archivos SOBRE el panel en producción.
NO borrar data/panel.db ni la carpeta data/.

La base se migra sola al primer login (columnas status/qr_token/display_name
en admin_users y owner_id en devices). El admin y cada reseller reciben un
código de 8 caracteres automáticamente.

Si un reseller NUEVO ya veía las MAC del admin: sube este paquete, entra como
admin a Revendedores y pulsa "Liberar MAC" en ese reseller. Luego vuelve a
entrar como reseller: Mis clientes debe quedar vacío hasta que active o reclame.

Archivos
--------
includes/reseller.php          (nuevo)
includes/bootstrap.php
includes/db.php
includes/auth.php
includes/page_header.php
includes/qr_common.php
login.php
settings.php
services_clients.php
qr_activate.php
resellers.php                  (nuevo)
reseller_pending.php           (nuevo)
modules/iboultra/module.php
api/_common.php
api/devices.php
api/playlists.php
api/admin_users.php
api/qr_activate.php
api/find_duplicates.php
api/subscriptions.php
api/parent_control.php

Cómo subir
----------
Copia manteniendo las carpetas (includes/, api/, modules/iboultra/)
encima del panel actual. Sobrescribe los PHP que ya existan.
NO subas ni borres data/panel.db.

Panel del admin
---------------
IBO Ultra → Revendedores (resellers.php)
  Crear reseller, ver código QR, suspender, regenerar código, borrar.

Panel del reseller (dos pantallas)
----------------------------------
Mis clientes (services_clients.php)
  Solo los que YA activó o reclamó.
  Aquí gestiona playlists, user/pass, etc.
  No ve portales, backup ni el resto del panel.

MAC pendientes (reseller_pending.php)
  No lista todas las pendientes.
  El reseller busca por MAC o por usuario IPTV:
    - TV abierta sin cuenta de pago → pendiente, la activa (portal + user/pass).
    - Cliente que ya entró en la app con usuario/contraseña → Reclamar
      (pasa a Mis clientes sin volver a escribir la clave).

QR de la app
------------
El cliente abre la app → QR → código del reseller (8 caracteres) + portal + user/pass.
La MAC queda a nombre de ese reseller.
Sin código no se activa.

Aislamiento
-----------
Admin ve todas las MAC.
Reseller 1 no ve ni puede activar las de Reseller 2 (si ya están asignadas).
