CREATE TYPE raca AS ENUM (
    'Humano', 'Elfo', 'Halfling', 'Anao'
);

CREATE TYPE classe AS ENUM (
    'Guerreiro', 'Mago', 'Ladrao', 'Clerigo'
);

CREATE TYPE tipo_equip AS ENUM (
    'Cabeca', 'Arma', 'Armadura', 'Pes'
);

CREATE TYPE tipo_pocao AS ENUM (
    'Vida', 'Confusao', 'Forca'
);

CREATE TYPE tipo_npc AS ENUM (
    'Vendedor', 'Passivo'
);

--Itens
CREATE TABLE IF NOT EXISTS item (

    item_id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL,
    nome VARCHAR(20) NOT NULL, 
    valor INTEGER NOT NULL DEFAULT 0, 
    bonus INTEGER NOT NULL DEFAULT 0,

    PRIMARY KEY (item_id)
);

--equipamentos

CREATE TABLE IF NOT EXISTS equipamento (

    fk_equip INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY REFERENCES item(item_id),
    classe_personagem classe NOT NULL,
    tipo tipo_equip DEFAULT NULL

);


--Porcoes
CREATE TABLE IF NOT EXISTS pocao (

    fk_pocao INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY REFERENCES item(item_id),
    tipo tipo_pocao DEFAULT NULL

);

--NPCs
CREATE TABLE IF NOT EXISTS npc (

    personagem_id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL,
    nome VARCHAR(20) NOT NULL,
    raca_npc raca DEFAULT NULL,
    tipo tipo_npc DEFAULT 'Passivo',

    PRIMARY KEY(personagem_id)
);

--Salas
CREATE TABLE IF NOT EXISTS sala (

    sala_id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL,
    descricao VARCHAR(300),
    nome VARCHAR(20),

    PRIMARY KEY (sala_id)
);

--Missoes
CREATE TABLE IF NOT EXISTS missao (

    missao_id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL,
    nome VARCHAR(20),
    descricao VARCHAR(300),

    PRIMARY KEY (missao_id)
);

CREATE TABLE IF NOT EXISTS jogador (
    personagem_id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL,
    nome VARCHAR(20) NOT NULL,
    raca_personagem raca NOT NULL,
    classe_personagem classe DEFAULT NULL,
    nivel INTEGER NOT NULL DEFAULT 1,
    forca_combate INTEGER NOT NULL DEFAULT 0,
    cabeca_id INTEGER DEFAULT NULL,
    arma_id INTEGER DEFAULT NULL,
    armadura_id INTEGER DEFAULT NULL,
    pes_id INTEGER DEFAULT NULL,
    missao_id INTEGER DEFAULT NULL,
    sala_id INTEGER DEFAULT NULL,

   PRIMARY KEY (personagem_id),
   FOREIGN KEY(cabeca_id) REFERENCES equipamento(fk_equip),
   FOREIGN KEY(arma_id) REFERENCES equipamento(fk_equip),
   FOREIGN KEY(armadura_id) REFERENCES equipamento(fk_equip),
   FOREIGN KEY(pes_id) REFERENCES equipamento(fk_equip),
   FOREIGN KEY(missao_id) REFERENCES missao(missao_id),
   FOREIGN KEY(sala_id) REFERENCES sala(sala_id)
);
--Inimigos
CREATE TABLE IF NOT EXISTS inimigo (

    inimigo_id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL,
    nome VARCHAR(20) NOT NULL,
    nivel INTEGER NOT NULL DEFAULT 1,
    jogador_id INTEGER DEFAULT NULL,

    PRIMARY KEY (inimigo_id),
    CONSTRAINT fk_jogador FOREIGN KEY (jogador_id) REFERENCES jogador(personagem_id)

);

-- Mochilas
CREATE TABLE IF NOT EXISTS mochila (
    mochila_id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL,
    capacidade INTEGER NOT NULL DEFAULT 10,
    total_itens INTEGER NOT NULL DEFAULT 0,
    jogador_id INTEGER,
    
    PRIMARY KEY (mochila_id),
    CONSTRAINT fk_jogador FOREIGN KEY (jogador_id) REFERENCES jogador(personagem_id)
);
