-- =============================================================================
-- Migración:    0004_create_role_permissions_table
-- Sprint:       1.1 — auth + RBAC + audit
-- Tabla:        role_permissions  (pivot)
-- Aplica en:    BD de cada tenant (innovium_<slug>)
-- Dependencias: 0002 (roles), 0003 (permissions).
--
-- Descripción:
--   Pivot que asocia roles con permisos. El check Auth::can($slug)
--   resuelve: usuario → user_roles → roles → role_permissions → permissions.
--
-- Notas:
--   - UNIQUE(role_id, permission_id) evita asignaciones duplicadas.
--   - ON DELETE RESTRICT en ambos FKs: NUNCA queremos perder mapeos
--     por borrar un rol o un permiso. Si hace falta retirar un permiso,
--     primero limpiar manualmente esta tabla.
-- =============================================================================

CREATE TABLE role_permissions (
    id            BIGINT UNSIGNED NOT NULL AUTO_INCREMENT
                  COMMENT 'PK auto-incremental del mapeo.',
    role_id       BIGINT UNSIGNED NOT NULL
                  COMMENT 'FK → roles.id (RESTRICT).',
    permission_id BIGINT UNSIGNED NOT NULL
                  COMMENT 'FK → permissions.id (RESTRICT).',
    creado_en     DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP
                  COMMENT 'UTC de creación del mapeo. Inmutable.',
    PRIMARY KEY (id),
    UNIQUE KEY uq_role_permissions_role_permission (role_id, permission_id),
    KEY idx_role_permissions_permission_id (permission_id),
    CONSTRAINT fk_role_permissions_role
        FOREIGN KEY (role_id) REFERENCES roles (id)
        ON DELETE RESTRICT ON UPDATE RESTRICT,
    CONSTRAINT fk_role_permissions_permission
        FOREIGN KEY (permission_id) REFERENCES permissions (id)
        ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Pivot rol↔permiso. Define qué permisos otorga cada rol.';
