CREATE TABLE IF NOT EXISTS spells (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  class ENUM('wizard', 'priest', 'both') NOT NULL,
  tier TINYINT NOT NULL,
  casting_stat ENUM('INT', 'WIS') NOT NULL,
  duration VARCHAR(100) NOT NULL DEFAULT 'Instant',
  `range` VARCHAR(100) NOT NULL DEFAULT 'Near',
  is_focus TINYINT NOT NULL DEFAULT 0,
  description TEXT NOT NULL DEFAULT '',
  UNIQUE KEY uq_spells_name_class (name, class)
);

CREATE TABLE IF NOT EXISTS character_spells (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  character_id INT UNSIGNED NOT NULL,
  spell_id INT UNSIGNED NOT NULL,
  exhausted TINYINT NOT NULL DEFAULT 0,
  locked_until DATETIME DEFAULT NULL,
  focus_active TINYINT NOT NULL DEFAULT 0,
  focus_started_at DATETIME DEFAULT NULL,
  UNIQUE KEY uq_char_spell (character_id, spell_id),
  FOREIGN KEY (character_id) REFERENCES characters(id) ON DELETE CASCADE,
  FOREIGN KEY (spell_id) REFERENCES spells(id) ON DELETE CASCADE
);

CREATE TABLE IF NOT EXISTS character_conditions (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  character_id INT UNSIGNED NOT NULL,
  name VARCHAR(255) NOT NULL,
  description TEXT DEFAULT '',
  rounds_remaining INT DEFAULT NULL,
  expires_at DATETIME DEFAULT NULL,
  created_at DATETIME DEFAULT NOW(),
  FOREIGN KEY (character_id) REFERENCES characters(id) ON DELETE CASCADE
);

ALTER TABLE roll_log
  ADD COLUMN IF NOT EXISTS subtype VARCHAR(50) DEFAULT NULL,
  ADD COLUMN IF NOT EXISTS metadata TEXT DEFAULT NULL,
  ADD COLUMN IF NOT EXISTS undone TINYINT NOT NULL DEFAULT 0
