CREATE TABLE tenants (
    id TEXT PRIMARY KEY,
    label TEXT NOT NULL,
    created_at datetime NOT NULL,
    updated_at datetime NOT NULL
);

-- Add foreign key to agents

ALTER TABLE agents RENAME TO _agents;

CREATE TABLE agents
(
    id INTEGER PRIMARY KEY,
    thumbprint TEXT UNIQUE,
    keyset TEXT,
    metadata TEXT,
    status INTEGER NOT NULL,
    created_at datetime NOT NULL,
    updated_at datetime NOT NULL,
    label TEXT DEFAULT "",
    contacted_at datetime,
    tenant_id TEXT,
    FOREIGN KEY (tenant_id) REFERENCES tenants (id)
);

INSERT INTO agents SELECT id, thumbprint, keyset, metadata, status, created_at, updated_at, label, contacted_at, 0 FROM _agents;

DROP TABLE _agents;

-- Add foreign key to specs

ALTER TABLE specs RENAME TO _specs;

CREATE TABLE specs
(
    id INTEGER PRIMARY KEY,
    agent_id INTEGER,
    name TEXT NOT NULL,
    revision INTEGER DEFAULT 0,
    data TEXT,
    created_at datetime NOT NULL,
    updated_at datetime NOT NULL,
    tenant_id TEXT,
    FOREIGN KEY (tenant_id) REFERENCES tenants (id),
    FOREIGN KEY (agent_id) REFERENCES agents (id) ON DELETE CASCADE,
    UNIQUE(agent_id, name) ON CONFLICT REPLACE
);

INSERT INTO specs SELECT id, agent_id, name, revision, data, created_at, updated_at, 0 FROM _specs;

DROP TABLE _specs;