-- =====================================================
-- Tabela: trilhas_pastas (PostgreSQL)
-- Armazena os vínculos entre trilhas de desenvolvimento
-- e pastas/arquivos do sistema de arquivos
-- =====================================================

-- Criar tipo ENUM para tipo de item
DO $$ BEGIN
    CREATE TYPE tipo_item AS ENUM ('pasta', 'arquivo');
EXCEPTION
    WHEN duplicate_object THEN null;
END $$;

-- Criar tabela
CREATE TABLE IF NOT EXISTS trilhas_pastas (
    id SERIAL PRIMARY KEY,
    trilha_id INTEGER NOT NULL,  -- FK para trilhas_desenvolvimento
    app_id INTEGER DEFAULT NULL,  -- FK para apps
    desenvolvedor_id INTEGER DEFAULT NULL,  -- FK para desenvolvedores
    software_house_id INTEGER DEFAULT NULL,  -- FK para software_houses
    caminho VARCHAR(500) NOT NULL,  -- Caminho completo do arquivo/pasta
    tipo tipo_item NOT NULL DEFAULT 'pasta',  -- Tipo do item
    status SMALLINT NOT NULL DEFAULT 0,  -- 0=Pendente, 1=Em Andamento, 2=Concluído, 3=Cancelado
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT NULL
);

-- Índices
CREATE INDEX IF NOT EXISTS idx_trilhas_pastas_trilha_id ON trilhas_pastas(trilha_id);
CREATE INDEX IF NOT EXISTS idx_trilhas_pastas_app_id ON trilhas_pastas(app_id);
CREATE INDEX IF NOT EXISTS idx_trilhas_pastas_desenvolvedor_id ON trilhas_pastas(desenvolvedor_id);
CREATE INDEX IF NOT EXISTS idx_trilhas_pastas_status ON trilhas_pastas(status);

-- Índice único para evitar duplicatas (trilha + caminho)
CREATE UNIQUE INDEX IF NOT EXISTS uk_trilha_caminho ON trilhas_pastas(trilha_id, caminho);

-- Comentários
COMMENT ON TABLE trilhas_pastas IS 'Vínculos entre trilhas e pastas/arquivos';
COMMENT ON COLUMN trilhas_pastas.trilha_id IS 'FK para trilhas_desenvolvimento';
COMMENT ON COLUMN trilhas_pastas.app_id IS 'FK para apps';
COMMENT ON COLUMN trilhas_pastas.desenvolvedor_id IS 'FK para desenvolvedores';
COMMENT ON COLUMN trilhas_pastas.software_house_id IS 'FK para software_houses';
COMMENT ON COLUMN trilhas_pastas.caminho IS 'Caminho completo do arquivo/pasta';
COMMENT ON COLUMN trilhas_pastas.tipo IS 'Tipo do item: pasta ou arquivo';
COMMENT ON COLUMN trilhas_pastas.status IS '0=Pendente, 1=Em Andamento, 2=Concluído, 3=Cancelado';
