-- =============================================================================
-- Migración:    0009_create_categorias_table
-- Sprint:       1.3 — schema del catálogo
-- Tabla:        categorias
-- Aplica en:    BD de cada tenant (innovium_<slug>)
-- Dependencias: ninguna (no tiene FKs).
--
-- Descripción:
--   Agrupaciones temáticas del catálogo (Urnas, Relicarios, Ánforas,
--   Servicios, etc). Cada producto pertenece a una categoría.
--
-- Notas de diseño:
--   - tipo ENUM permite distinguir productos físicos de servicios sin
--     necesidad de tablas separadas: capilla velatoria (servicio) y
--     urna (producto) viven en la misma tabla `productos`, distinguidos
--     por su categoría.
--   - slug UNIQUE: identificador URL-friendly (`urnas`, `relicarios`).
--     Validado en código antes de insertar.
--   - icono: nombre del icono Lucide para UI (ej: 'package', 'flame').
--   - orden_visual: para ordenar tarjetas/listas en pantalla.
--   - Sprint 1.3 deja la tabla vacía. Cada admin de funeraria carga
--     sus categorías en Sprint 1.4 cuando exista UI.
-- =============================================================================

CREATE TABLE categorias (
    id              BIGINT UNSIGNED NOT NULL AUTO_INCREMENT
                    COMMENT 'PK auto-incremental.',
    slug            VARCHAR(60)     NOT NULL
                    COMMENT 'Identificador URL (ej: "urnas", "relicarios"). Validado en código.',
    nombre          VARCHAR(100)    NOT NULL
                    COMMENT 'Nombre legible (ej: "Urnas", "Servicios funerarios").',
    descripcion     TEXT                NULL
                    COMMENT 'Descripción larga opcional para vista de categoría.',
    icono           VARCHAR(50)         NULL
                    COMMENT 'Nombre del icono Lucide para UI (ej: "package", "flame"). NULL = sin icono.',
    orden_visual    INT             NOT NULL DEFAULT 0
                    COMMENT 'Orden ascendente para mostrar en pantalla (0=primero).',
    tipo            ENUM('producto', 'servicio')
                                    NOT NULL DEFAULT 'producto'
                    COMMENT 'producto=físico, servicio=intangible (capilla, traslado, exhumación).',
    activo          TINYINT(1)      NOT NULL DEFAULT 1
                    COMMENT '1=visible en catálogo, 0=oculta sin borrarla.',
    creado_en       DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP
                    COMMENT 'UTC de creación. Inmutable.',
    actualizado_en  DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP
                                             ON UPDATE CURRENT_TIMESTAMP
                    COMMENT 'UTC de la última edición. Auto-actualizado por MySQL.',
    eliminado_en    DATETIME            NULL
                    COMMENT 'UTC del soft-delete. NULL = activa. NUNCA hacer DELETE físico.',
    PRIMARY KEY (id),
    UNIQUE KEY uq_categorias_slug (slug),
    KEY idx_categorias_tipo (tipo),
    KEY idx_categorias_activo_orden (activo, orden_visual),
    KEY idx_categorias_eliminado_en (eliminado_en)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Agrupaciones temáticas del catálogo (Urnas, Servicios, etc).';
