-- Repository history table for storing and suggesting previously used repositories
-- Used to track repositories across contracts and provide suggestions when adding new repos

CREATE TABLE IF NOT EXISTS repository_history (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    owner_id UUID NOT NULL REFERENCES owners(id) ON DELETE CASCADE,
    name VARCHAR(255) NOT NULL,
    repository_url VARCHAR(512),            -- For remote repos
    local_path VARCHAR(512),                -- For local repos
    source_type VARCHAR(32) NOT NULL,       -- 'remote' or 'local'
    use_count INTEGER NOT NULL DEFAULT 1,
    last_used_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

-- Index for efficient owner lookups
CREATE INDEX idx_repository_history_owner_id ON repository_history(owner_id);

-- Index for filtering by source type
CREATE INDEX idx_repository_history_source_type ON repository_history(source_type);

-- Index for ordering by use_count and last_used_at
CREATE INDEX idx_repository_history_usage ON repository_history(owner_id, use_count DESC, last_used_at DESC);

-- Unique constraint per owner + source_type + (url or path)
-- This prevents duplicates while allowing the same URL to be tracked by different owners
CREATE UNIQUE INDEX idx_repository_history_unique_remote
    ON repository_history(owner_id, repository_url) WHERE source_type = 'remote' AND repository_url IS NOT NULL;

CREATE UNIQUE INDEX idx_repository_history_unique_local
    ON repository_history(owner_id, local_path) WHERE source_type = 'local' AND local_path IS NOT NULL;
