-- Create tablo_access table for managing shared access to tablos
CREATE TABLE IF NOT EXISTS tablo_access (
    id SERIAL PRIMARY KEY,
    tablo_id INTEGER NOT NULL,
    user_id UUID NOT NULL,
    granted_by UUID NOT NULL,
    is_active BOOLEAN DEFAULT TRUE,
    is_admin BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    
    -- Foreign key constraint to tablos table
    CONSTRAINT fk_tablo_access_tablo_id 
        FOREIGN KEY (tablo_id) REFERENCES tablos(id) ON DELETE CASCADE,
    
    -- Unique constraint to prevent duplicate access records
    CONSTRAINT unique_tablo_access 
        UNIQUE (tablo_id, user_id)
        
    -- Foreign key constraint to users table (auth.users)
    CONSTRAINT fk_tablo_access_user_id 
        FOREIGN KEY (user_id) REFERENCES auth.users(id) ON DELETE CASCADE,
);

-- Create indexes for performance
CREATE INDEX IF NOT EXISTS idx_tablo_access_tablo_id ON tablo_access(tablo_id);
CREATE INDEX IF NOT EXISTS idx_tablo_access_user_id ON tablo_access(user_id);

-- Enable Row Level Security
ALTER TABLE tablo_access ENABLE ROW LEVEL SECURITY;

-- Policy to allow users to view tablo_access records where they are the user
CREATE POLICY "Users can view their tablo access only if the access is active" ON tablo_access
    FOR SELECT USING (
        user_id = (SELECT auth.uid())
        AND is_active = TRUE
    );
