using EntitlementDAL.DTOs;
namespace EntitlementBLL.Demo;
/// Thread 3 (Demo/DemoDB, tracker §49) — admin authoring for MDEMOVARIANT/
/// MDEMOPOOLINSTANCE. Distinct from IDemoSessionBLL (session lifecycle) — this is the catalog
/// an ops/CS person registers ONCE per demo "flavor" (industry x geography x period, or a
/// specific feature showcase) and its pre-provisioned pool instances, previously only reachable
/// via direct SQL (no SL endpoint/FE existed).
public interface IDemoCatalogBLL
{
Task CreateVariantAsync(DemoVariantDTO dto, CancellationToken ct);
Task GetVariantByIdAsync(int demoVariantId, CancellationToken ct);
Task> GetVariantListAsync(CancellationToken ct);
/// Updates an existing variant's editable fields — VariantCode/DemoVariantId/audit
/// fields never change once created (mirrors VARIANT_UPDATE's own scope exactly).
Task UpdateVariantAsync(DemoVariantDTO dto, CancellationToken ct);
/// Registers an already-provisioned physical database (SwClientDatabaseId — created
/// separately via the real SqlWorkbench ClientProvisioning pipeline, §11/§31) as one more
/// pooled instance backing a variant. Does not itself provision anything.
Task CreatePoolInstanceAsync(DemoPoolInstanceDTO dto, CancellationToken ct);
Task> GetPoolInstancesByVariantAsync(int demoVariantId, CancellationToken ct);
/// Corrects which physical database (SwClientDatabaseId) or local demo-tenant
/// (LocalClientId) a pool instance points at. Never reassigns DemoVariantId or PoolState —
/// those have their own dedicated lifecycle methods (checkout/reset), not this one.
Task UpdatePoolInstanceAsync(DemoPoolInstanceDTO dto, CancellationToken ct);
}