-- Placeholder for the M4.1 schema (see PLATFORM_ARCHITECTURE.md §5c).
-- The skeleton uses an in-memory store; this file lands the table shape
-- the real M4.1 PR will use, so the schema review can happen alongside
-- the rest of the boot scaffolding.

-- enums --------------------------------------------------------------------

CREATE TYPE tenant_status AS ENUM ('trial', 'active', 'frozen', 'archived', 'demo');
CREATE TYPE tenant_kind   AS ENUM ('customer', 'demo', 'stage', 'internal');

-- tenants ------------------------------------------------------------------

CREATE TABLE tenants (
    id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    slug        TEXT UNIQUE NOT NULL CHECK (slug ~ '^[a-z0-9-]{2,40}$'),
    name        TEXT NOT NULL,
    status      tenant_status NOT NULL DEFAULT 'trial',
    kind        tenant_kind   NOT NULL DEFAULT 'customer',
    plan        TEXT NOT NULL DEFAULT 'starter',
    created_at  TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    updated_at  TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    trial_ends_at TIMESTAMPTZ
);

CREATE INDEX tenants_status_idx ON tenants (status);

-- tenant ↔ product entitlements -------------------------------------------

CREATE TABLE tenant_products (
    tenant_id   UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
    product     TEXT NOT NULL,
    enabled     BOOLEAN NOT NULL DEFAULT TRUE,
    created_at  TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    PRIMARY KEY (tenant_id, product)
);

-- audit log (Retraced-shape; PRODUCT_INTEGRATION_SPEC.md §8.4) ------------

CREATE TABLE audit_log (
    id          BIGSERIAL PRIMARY KEY,
    tenant_id   UUID REFERENCES tenants(id),
    actor_id    TEXT,
    actor_name  TEXT,
    action      TEXT NOT NULL,
    target_id   TEXT,
    target_type TEXT,
    metadata    JSONB NOT NULL DEFAULT '{}'::jsonb,
    source_ip   INET,
    created_at  TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE INDEX audit_log_tenant_idx ON audit_log (tenant_id, created_at DESC);
