# Catalogo Temporal para Gala (CodeIgniter 3)

## Acceso
- Login: `/catalog/login`
- Panel admin: `/catalog/admin` (requiere login)
- Catalogo publico: se genera desde el panel (link con token)

## Panel lateral (tabs)
- `Dashboard`: `/catalog/admin/dashboard`
- `Links`: `/catalog/admin/links`
- `Pedidos`: `/catalog/admin/orders`
- `Empleados`: `/catalog/admin/employees`
- `Configuracion Catalogo`: `/catalog/admin/settings`
- `Plantillas`: `/catalog/admin/templates`

## Plantillas visuales
- Puedes crear plantillas con:
  - nombre
  - color principal
  - color secundario
  - color de fondo
  - color de borde
  - color de texto principal y secundario
  - tamano de fuente para titulo, descripcion y precio
  - tamano de logo (px)
  - estilo de tarjeta (`rounded`, `soft`, `sharp`)
- Desde la pestaña `Plantillas` puedes activar la plantilla que quieres usar.
- Tambien puedes editar y eliminar plantillas.
- Si eliminas la plantilla activa, el sistema activa automaticamente otra.
- El sistema no permite eliminar la ultima plantilla.
- El catalogo publico aplica automaticamente la plantilla activa.

## Orden de categorias y mercancia
- En `Catalogo > Configuracion` puedes:
  - definir el orden de mercancia dentro de categoria (`Nombre A-Z`, `Nombre Z-A`, `Mas recientes`, `Mas antiguos`)
  - definir el orden manual de categorias (numero menor aparece primero)
- El catalogo publico respeta este orden automaticamente.

## Flujo implementado
1. Creas link temporal por cliente y fecha de expiracion.
2. En el link defines empleado y sucursal para esa venta.
3. Cliente abre link, agrega cantidades y envia pedido.
4. Se guarda pedido en tablas `catalog_*` y puedes descargar CSV/PDF del pedido.

## Login y permisos
- Usa el mismo `username/password` de `phppos_employees`.
- Compatible con hash `md5` (actual) y `password_hash` (futuro).
- Se agrego control de permisos por empleado en `catalog_employee_permissions`:
  - `can_access_panel`
  - `can_create_links`
  - `can_view_orders`
  - `can_download_reports`
  - `can_manage_permissions`
- Si no existe registro personalizado, se toman permisos por defecto segun modulos de PHPPOS (`sales`, `reports`, `config`, etc.).

## Arquitectura de base de datos (v2)
- `gala`: solo lectura (fuente `phppos_*` para empleados, clientes, productos, precios, imagenes).
- `catalogo`: lectura/escritura del modulo (todas las tablas `catalog_*`).
- El modulo no escribe en tablas `phppos_*`.

## Tablas nuevas (auto-creadas al entrar al modulo, en `catalogo`)
- `catalog_links`
- `catalog_orders`
- `catalog_order_items`

## Configuracion clave
Archivo: `application/config/catalog.php`

- `catalog_default_employee_id`: empleado por defecto del link.
- `catalog_default_location_id`: sucursal por defecto para precios del catalogo.
- `catalog_token_bytes`: longitud del token del link.
- `catalog_currency_symbol`: simbolo usado en vistas.
- `catalog_webhook_enabled`: activa o desactiva webhooks.
- `catalog_webhook_url`: URL de webhook (por ejemplo, n8n).
- `catalog_webhook_secret`: clave para firma HMAC SHA-256.
- `catalog_webhook_token`: token simple opcional en header.
- `catalog_webhook_timeout`: timeout total de request (segundos).
- `catalog_webhook_connect_timeout`: timeout de conexion (segundos).
- `catalog_webhook_verify_ssl`: validar SSL del destino.

Nota: aunque haya defaults en config, ahora cada link puede guardar su propio `employee_id` y `location_id`.

## Integracion con precios por cliente (tier)
El catalogo calcula precio en este orden:
1. `phppos_location_items_tier_prices`
2. `phppos_items_tier_prices`
3. Precio promo activo
4. Precio base (location/item)

## Notas
- Filtra productos `deleted=0`, `item_inactive=0`, `is_ecommerce=1`.
- Muestra imagen principal o primera imagen de `phppos_item_images`.
- CSV/PDF se descargan desde el detalle de pedido o panel.

## Webhooks de eventos
Cuando se activa webhook, el modulo envÃ­a:
- `link_created`: al crear un link nuevo desde admin.
- `order_created`: al confirmar pedido desde catalogo pÃºblico.

La configuracion se puede manejar desde:
- `Catalogo > Configuracion > Webhooks`
- y tambien por archivo `application/config/catalog.php` (fallback).

Headers enviados:
- `X-Catalog-Event`
- `X-Catalog-Timestamp`
- `X-Catalog-Token` (si configurado)
- `X-Catalog-Signature: sha256=...` (si hay secret)

Firma:
- `hash_hmac('sha256', timestamp + '.' + raw_json_body, secret)`
