CREATE OR REPLACE VIEW user_tablos
WITH (security_invoker)
AS
SELECT DISTINCT
    t.id,
    ta.user_id,
    t.name,
    t.image,
    t.color,
    t.status,
    t.position,
    t.created_at,
    t.deleted_at,
    -- Access information
    CASE 
        WHEN ta.is_admin = TRUE THEN 'admin'
        ELSE 'member'
    END as access_level,
    ta.is_admin as is_admin
FROM tablos t
LEFT JOIN tablo_access ta ON t.id = ta.tablo_id
WHERE 
    ta.is_active = TRUE
    AND
    t.deleted_at IS NULL
ORDER BY t.position ASC, t.created_at DESC;

-- Add comment to document the view
COMMENT ON VIEW user_tablos IS 
    'View that returns all tablos accessible to the current authenticated user, including owned tablos and shared tablos with active access';

-- Example usage queries:

-- 1. Get all tablos for the current user
-- SELECT * FROM user_tablos;

-- 2. Get only tablos where user is owner
-- SELECT * FROM user_tablos WHERE access_level = 'owner';

-- 3. Get only shared tablos where user is admin
-- SELECT * FROM user_tablos WHERE access_level = 'admin' AND owner_id != (SELECT auth.uid());

-- 4. Get tablos by status
-- SELECT * FROM user_tablos WHERE status = 'in_progress';

-- 5. Count tablos by access level
-- SELECT access_level, COUNT(*) FROM user_tablos GROUP BY access_level; 