-- =====================================================
-- RLS POLICIES FOR platform_settings TABLE
-- =====================================================
-- This fixes the empty JSON response when non-admin users
-- try to access branding settings (logo, favicon, colors)
-- =====================================================

-- Step 1: Enable RLS on platform_settings (if not already enabled)
ALTER TABLE platform_settings ENABLE ROW LEVEL SECURITY;

-- Step 2: Drop existing policies (if any)
DROP POLICY IF EXISTS "Anyone can view platform settings" ON platform_settings;
DROP POLICY IF EXISTS "Admins can update platform settings" ON platform_settings;
DROP POLICY IF EXISTS "Admins can insert platform settings" ON platform_settings;

-- Step 3: Create policies

-- Policy 1: Allow ANYONE (including public) to SELECT platform_settings
-- This is needed for branding to work on public pages
CREATE POLICY "Public can view platform settings"
ON platform_settings FOR SELECT
TO public
USING (true);

-- Policy 2: Allow authenticated users to SELECT platform_settings
CREATE POLICY "Authenticated can view platform settings"
ON platform_settings FOR SELECT
TO authenticated
USING (true);

-- Policy 3: Allow admins to UPDATE platform_settings
CREATE POLICY "Admins can update platform settings"
ON platform_settings FOR UPDATE
TO authenticated
USING (
  EXISTS (
    SELECT 1 FROM profiles
    WHERE profiles.id = auth.uid()
    AND profiles.role = 'admin'
  )
);

-- Policy 4: Allow admins to INSERT platform_settings
CREATE POLICY "Admins can insert platform settings"
ON platform_settings FOR INSERT
TO authenticated
WITH CHECK (
  EXISTS (
    SELECT 1 FROM profiles
    WHERE profiles.id = auth.uid()
    AND profiles.role = 'admin'
  )
);

-- Policy 5: Allow admins to DELETE platform_settings
CREATE POLICY "Admins can delete platform settings"
ON platform_settings FOR DELETE
TO authenticated
USING (
  EXISTS (
    SELECT 1 FROM profiles
    WHERE profiles.id = auth.uid()
    AND profiles.role = 'admin'
  )
);

-- =====================================================
-- VERIFICATION
-- =====================================================

-- Test as public (should return data)
-- Run this in a new SQL window without authentication:
SELECT * FROM platform_settings;

-- Check current policies
SELECT
  tablename,
  policyname,
  permissive,
  roles,
  cmd,
  qual,
  with_check
FROM pg_policies
WHERE tablename = 'platform_settings';

-- =====================================================
-- ALTERNATIVE: Simpler policies (if profile check doesn't work)
-- =====================================================

-- If the above policies don't work, use these simpler versions:
-- DROP POLICY IF EXISTS "Admins can update platform settings" ON platform_settings;
-- DROP POLICY IF EXISTS "Admins can insert platform settings" ON platform_settings;
-- DROP POLICY IF EXISTS "Admins can delete platform settings" ON platform_settings;
--
-- -- Allow all authenticated users to modify (less secure, but works)
-- CREATE POLICY "Authenticated can update platform settings"
-- ON platform_settings FOR UPDATE
-- TO authenticated
-- USING (true)
-- WITH CHECK (true);
--
-- CREATE POLICY "Authenticated can insert platform settings"
-- ON platform_settings FOR INSERT
-- TO authenticated
-- WITH CHECK (true);
--
-- CREATE POLICY "Authenticated can delete platform settings"
-- ON platform_settings FOR DELETE
-- TO authenticated
-- USING (true);

-- =====================================================
-- TROUBLESHOOTING
-- =====================================================

-- Check if RLS is enabled
SELECT tablename, rowsecurity
FROM pg_tables
WHERE tablename = 'platform_settings';

-- Check if table has data
SELECT COUNT(*) as row_count FROM platform_settings;

-- Check current user
SELECT auth.uid();
SELECT * FROM profiles WHERE id = auth.uid();
