CREATE TABLE IF NOT EXISTS join_tokens (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  wedding_id BINARY(16) NOT NULL,
  public_wedding_id VARCHAR(96) NOT NULL,
  token_hash CHAR(64) NOT NULL,
  source ENUM('qr','link','airbridge','extension') NOT NULL DEFAULT 'airbridge',
  environment VARCHAR(64) NOT NULL DEFAULT 'production',
  single_use TINYINT(1) NOT NULL DEFAULT 1,
  issued_at DATETIME(6) NOT NULL,
  expires_at DATETIME(6) NOT NULL,
  used_at DATETIME(6) NULL,
  created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  UNIQUE KEY uq_join_tokens_hash (token_hash),
  KEY idx_join_tokens_public_wedding (public_wedding_id),
  KEY idx_join_tokens_expiry (expires_at),
  CONSTRAINT fk_join_tokens_wedding FOREIGN KEY (wedding_id) REFERENCES weddings(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS join_resolution_audit (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  wedding_id BINARY(16) NULL,
  public_wedding_id VARCHAR(96) NOT NULL,
  source ENUM('qr','link','airbridge','extension') NOT NULL,
  outcome VARCHAR(64) NOT NULL,
  token_hash CHAR(64) NOT NULL,
  remote_hash CHAR(64) NULL,
  occurred_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  KEY idx_join_audit_public_wedding_time (public_wedding_id, occurred_at),
  KEY idx_join_audit_token_hash (token_hash),
  CONSTRAINT fk_join_audit_wedding FOREIGN KEY (wedding_id) REFERENCES weddings(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
