-- Справочники рас/классов и стартовые наборы (L2J / Essence, protocol 520).
-- Основные шаблоны всё равно в XML datapack; это минимум для БД и отладки.

CREATE TABLE IF NOT EXISTS ref_races (
  race_id SMALLINT NOT NULL PRIMARY KEY,
  code VARCHAR(20) NOT NULL UNIQUE,
  name_en VARCHAR(40) NOT NULL,
  name_ru VARCHAR(40) NOT NULL,
  enabled BOOLEAN NOT NULL DEFAULT TRUE,
  spawn_x INTEGER NOT NULL,
  spawn_y INTEGER NOT NULL,
  spawn_z INTEGER NOT NULL,
  spawn_heading INTEGER NOT NULL DEFAULT 0
);

CREATE TABLE IF NOT EXISTS ref_classes (
  class_id INTEGER NOT NULL PRIMARY KEY,
  code VARCHAR(40) NOT NULL,
  name_en VARCHAR(60) NOT NULL,
  name_ru VARCHAR(60) NOT NULL,
  race_id SMALLINT NOT NULL REFERENCES ref_races (race_id),
  parent_id INTEGER REFERENCES ref_classes (class_id),
  class_level SMALLINT NOT NULL DEFAULT 0,
  is_mage BOOLEAN NOT NULL DEFAULT FALSE,
  is_summoner BOOLEAN NOT NULL DEFAULT FALSE,
  can_create BOOLEAN NOT NULL DEFAULT FALSE,
  sex_restrict SMALLINT NOT NULL DEFAULT 0,
  CONSTRAINT chk_sex_restrict CHECK (sex_restrict IN (0, 1, 2))
);

CREATE INDEX IF NOT EXISTS idx_ref_classes_race ON ref_classes (race_id);
CREATE INDEX IF NOT EXISTS idx_ref_classes_parent ON ref_classes (parent_id);
CREATE INDEX IF NOT EXISTS idx_ref_classes_create ON ref_classes (can_create) WHERE can_create;

-- Совместимость со старыми инсталляторами L2J
CREATE TABLE IF NOT EXISTS class_list (
  id INTEGER NOT NULL PRIMARY KEY,
  class_name VARCHAR(40) NOT NULL
);

CREATE TABLE IF NOT EXISTS starter_equipment (
  id SERIAL PRIMARY KEY,
  class_id INTEGER NOT NULL REFERENCES ref_classes (class_id),
  sex SMALLINT NOT NULL DEFAULT 0,
  item_id INTEGER NOT NULL,
  amount BIGINT NOT NULL DEFAULT 1,
  enchant_level INTEGER NOT NULL DEFAULT 0,
  equipped BOOLEAN NOT NULL DEFAULT FALSE,
  paperdoll_slot SMALLINT NOT NULL DEFAULT 0,
  UNIQUE (class_id, sex, item_id)
);

CREATE TABLE IF NOT EXISTS starter_skills (
  class_id INTEGER NOT NULL REFERENCES ref_classes (class_id),
  skill_id INTEGER NOT NULL,
  skill_level INTEGER NOT NULL DEFAULT 1,
  PRIMARY KEY (class_id, skill_id)
);

-- Упрощённые приросты HP/MP на 1–20 ур. (если сервер читает из БД)
CREATE TABLE IF NOT EXISTS lvlupgain (
  class_id INTEGER NOT NULL,
  level SMALLINT NOT NULL,
  hp_gain DOUBLE PRECISION NOT NULL DEFAULT 0,
  mp_gain DOUBLE PRECISION NOT NULL DEFAULT 0,
  cp_gain DOUBLE PRECISION NOT NULL DEFAULT 0,
  PRIMARY KEY (class_id, level)
);
