-- v1.1.3: distinguish endpoint scripts (HTTP / trigger entry points) from
-- module scripts (libraries `import`ed by other scripts). The Rhai module
-- resolver added in v1.1.3 looks up `kind = 'module'` rows by
-- `(app_id, name)`; route bind and trigger create reject `kind = 'module'`
-- targets.
--
-- Backfill: existing rows take the DEFAULT clause on column add. Every
-- script that existed in v1.0 / v1.1.0 / v1.1.1 / v1.1.2 was an endpoint
-- (the only kind those versions supported), which matches the default.
ALTER TABLE scripts
    ADD COLUMN kind TEXT NOT NULL DEFAULT 'endpoint'
        CHECK (kind IN ('endpoint', 'module'));

-- Composite index on (app_id, kind) so the resolver's per-app module
-- lookup ("modules in app X named Y") is one index scan. The existing
-- per-app UNIQUE on `name` already serves name-based lookups, but it
-- doesn't help when filtering specifically for `kind = 'module'`.
CREATE INDEX idx_scripts_app_kind ON scripts (app_id, kind);

-- Modules are imported by exact string name; arbitrary spaces / control
-- characters would make `import "<name>"` fragile. We constrain module
-- names to a conservative identifier shape (letters, digits, underscore;
-- starts with a non-digit; up to 64 chars). Endpoint scripts keep the
-- looser pre-v1.1.3 name rules — the dashboard generates endpoint names
-- (and some users may already have spaces in them; we don't break those).
ALTER TABLE scripts
    ADD CONSTRAINT scripts_module_name_shape
    CHECK (
        kind <> 'module'
        OR name ~ '^[a-zA-Z_][a-zA-Z0-9_]{0,63}$'
    );
