-- ============================================================
-- 080_access_invites.sql — convite de acesso: o cliente define a própria senha
-- ============================================================
-- Até aqui, criar uma conta devolvia a senha temporária EM CLARO no JSON, para
-- alguém copiar e mandar ao cliente por WhatsApp. Funciona, mas a senha passa
-- por tela, área de transferência e conversa — e fica lá para sempre.
--
-- O convite substitui isso: link de uso único e prazo curto, onde o PRÓPRIO
-- cliente escolhe a senha. Mesmo desenho do magic token do onboarding (256
-- bits), com duas diferenças que importam aqui: expira (72h) e queima ao usar.
--
-- A senha temporária continua existindo no banco (a conta precisa de um hash
-- válido desde o nascimento), mas ninguém nunca a vê — nasce aleatória e é
-- substituída quando o cliente abre o link.
-- ============================================================

CREATE TABLE IF NOT EXISTS access_invites (
  id            varchar PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id       varchar NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  token         varchar(64) NOT NULL UNIQUE,
  expires_at    timestamptz NOT NULL,
  used_at       timestamptz,
  created_by_user_id varchar REFERENCES users(id),
  ip            varchar(60),
  user_agent    varchar(500),
  created_at    timestamptz NOT NULL DEFAULT now()
);

-- Busca do link: sempre por token. O índice único acima já resolve.
-- Este cobre a listagem "convites pendentes desta conta" no painel.
CREATE INDEX IF NOT EXISTS idx_access_invites_user
  ON access_invites (user_id, used_at);
