CREATE TABLE IF NOT EXISTS convidados (
  id BIGSERIAL PRIMARY KEY,
  nome VARCHAR(150) NOT NULL,
  telefone VARCHAR(30),
  codigo VARCHAR(120) NOT NULL UNIQUE,
  status VARCHAR(20) NOT NULL DEFAULT 'LIBERADO',
  data_checkin TIMESTAMP NULL,
  usuario_checkin VARCHAR(100),
  criado_em TIMESTAMP NOT NULL DEFAULT NOW(),
  CONSTRAINT convidados_status_check CHECK (status IN ('LIBERADO', 'BLOQUEADO', 'ENTROU'))
);

CREATE TABLE IF NOT EXISTS log_checkin (
  id BIGSERIAL PRIMARY KEY,
  convidado_id BIGINT REFERENCES convidados(id) ON DELETE SET NULL,
  codigo_lido VARCHAR(120) NOT NULL,
  resultado VARCHAR(20) NOT NULL,
  usuario VARCHAR(100),
  data_hora TIMESTAMP NOT NULL DEFAULT NOW()
);

CREATE INDEX IF NOT EXISTS idx_convidados_codigo ON convidados(codigo);
CREATE INDEX IF NOT EXISTS idx_convidados_status ON convidados(status);
CREATE INDEX IF NOT EXISTS idx_log_checkin_codigo_lido ON log_checkin(codigo_lido);
CREATE INDEX IF NOT EXISTS idx_log_checkin_data_hora ON log_checkin(data_hora DESC);
