-- ============================================
-- SCRIPT SQL - Tabela Desenvolvedores
-- Banco: gnesis (PostgreSQL)
-- ============================================

-- Criar sequence para a tabela
CREATE SEQUENCE IF NOT EXISTS desenvolvedores_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 2147483647
START 1
CACHE 1;

-- Criar tabela desenvolvedores
CREATE TABLE IF NOT EXISTS desenvolvedores (
    id INT NOT NULL DEFAULT nextval('desenvolvedores_id_seq'::regclass),
    software_house_id INT NOT NULL,
    pessoa_id INT,
    nome VARCHAR(255) NOT NULL,
    nickname VARCHAR(100) NOT NULL,
    email VARCHAR(255) NOT NULL,
    pasta_componentes VARCHAR(255),
    url_acesso VARCHAR(255),
    ativo BOOLEAN DEFAULT true,
    data_cadastro TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    -- Constraints
    CONSTRAINT desenvolvedores_pkey PRIMARY KEY (id),
    CONSTRAINT desenvolvedores_nickname_unique UNIQUE (nickname),
    CONSTRAINT desenvolvedores_software_house_fkey FOREIGN KEY (software_house_id) 
        REFERENCES software_house(id) ON DELETE CASCADE,
    CONSTRAINT desenvolvedores_pessoa_fkey FOREIGN KEY (pessoa_id) 
        REFERENCES pessoas(id) ON DELETE SET NULL
);

-- Criar índices para performance
CREATE INDEX IF NOT EXISTS idx_dev_nickname ON desenvolvedores(nickname);
CREATE INDEX IF NOT EXISTS idx_dev_software_house ON desenvolvedores(software_house_id);
CREATE INDEX IF NOT EXISTS idx_dev_pessoa ON desenvolvedores(pessoa_id);
CREATE INDEX IF NOT EXISTS idx_dev_ativo ON desenvolvedores(ativo);

-- Comentários na tabela
COMMENT ON TABLE desenvolvedores IS 'Desenvolvedores vinculados às software houses';
COMMENT ON COLUMN desenvolvedores.id IS 'ID único do desenvolvedor';
COMMENT ON COLUMN desenvolvedores.software_house_id IS 'ID da software house (FK)';
COMMENT ON COLUMN desenvolvedores.pessoa_id IS 'ID da pessoa (FK) - opcional';
COMMENT ON COLUMN desenvolvedores.nome IS 'Nome completo do desenvolvedor';
COMMENT ON COLUMN desenvolvedores.nickname IS 'Apelido único usado para pasta e URL';
COMMENT ON COLUMN desenvolvedores.email IS 'Email do desenvolvedor';
COMMENT ON COLUMN desenvolvedores.pasta_componentes IS 'Caminho da pasta de componentes do dev';
COMMENT ON COLUMN desenvolvedores.url_acesso IS 'URL personalizada de acesso';
COMMENT ON COLUMN desenvolvedores.ativo IS 'Se o desenvolvedor está ativo';
COMMENT ON COLUMN desenvolvedores.data_cadastro IS 'Data de cadastro do desenvolvedor';

-- Inserir desenvolvedor de exemplo (opcional)
-- INSERT INTO desenvolvedores (software_house_id, nome, nickname, email, pasta_componentes, url_acesso)
-- VALUES (14, 'Desenvolvedor Teste', 'devteste', 'dev@teste.com', 'componentes/dev/devteste', 'dev-devteste');
