-- Enable RLS
ALTER TABLE phonics_exercise_categories ENABLE ROW LEVEL SECURITY;
ALTER TABLE phonics_exercise_types ENABLE ROW LEVEL SECURITY;
ALTER TABLE phonics_exercises ENABLE ROW LEVEL SECURITY;
ALTER TABLE phonics_words ENABLE ROW LEVEL SECURITY;
ALTER TABLE phonics_exercise_words ENABLE ROW LEVEL SECURITY;
ALTER TABLE media_types ENABLE ROW LEVEL SECURITY;
ALTER TABLE phonics_exercise_media ENABLE ROW LEVEL SECURITY;
ALTER TABLE student_phonics_progress ENABLE ROW LEVEL SECURITY;
ALTER TABLE student_phonics_attempts ENABLE ROW LEVEL SECURITY;
ALTER TABLE student_phonics_attempt_answers ENABLE ROW LEVEL SECURITY;
ALTER TABLE achievement_types ENABLE ROW LEVEL SECURITY;
ALTER TABLE phonics_achievements ENABLE ROW LEVEL SECURITY;
ALTER TABLE student_phonics_achievements ENABLE ROW LEVEL SECURITY;

-- Políticas para categorias
CREATE POLICY "Categorias visíveis para usuários autenticados"
ON phonics_exercise_categories FOR SELECT
TO authenticated
USING (true);

-- Políticas para tipos de exercícios
CREATE POLICY "Tipos de exercícios visíveis para usuários autenticados"
ON phonics_exercise_types FOR SELECT
TO authenticated
USING (true);

-- Políticas para exercícios
CREATE POLICY "Exercícios visíveis para usuários autenticados"
ON phonics_exercises FOR SELECT
TO authenticated
USING (is_active = true);

-- Políticas para palavras
CREATE POLICY "Palavras visíveis para usuários autenticados"
ON phonics_words FOR SELECT
TO authenticated
USING (true);

-- Políticas para relação exercício-palavras
CREATE POLICY "Relações exercício-palavras visíveis para usuários autenticados"
ON phonics_exercise_words FOR SELECT
TO authenticated
USING (true);

-- Políticas para tipos de mídia
CREATE POLICY "Tipos de mídia visíveis para usuários autenticados"
ON media_types FOR SELECT
TO authenticated
USING (true);

-- Políticas para mídia dos exercícios
CREATE POLICY "Mídia dos exercícios visível para usuários autenticados"
ON phonics_exercise_media FOR SELECT
TO authenticated
USING (true);

-- Políticas para progresso do estudante
CREATE POLICY "Progresso visível apenas para o próprio estudante"
ON student_phonics_progress FOR SELECT
TO authenticated
USING (auth.uid() = student_id);

CREATE POLICY "Progresso pode ser inserido pelo próprio estudante"
ON student_phonics_progress FOR INSERT
TO authenticated
WITH CHECK (auth.uid() = student_id);

CREATE POLICY "Progresso pode ser atualizado pelo próprio estudante"
ON student_phonics_progress FOR UPDATE
TO authenticated
USING (auth.uid() = student_id)
WITH CHECK (auth.uid() = student_id);

-- Políticas para tentativas
CREATE POLICY "Tentativas visíveis apenas para o próprio estudante"
ON student_phonics_attempts FOR SELECT
TO authenticated
USING (auth.uid() = student_id);

CREATE POLICY "Tentativas podem ser inseridas pelo próprio estudante"
ON student_phonics_attempts FOR INSERT
TO authenticated
WITH CHECK (auth.uid() = student_id);

-- Políticas para respostas das tentativas
CREATE POLICY "Respostas visíveis apenas para o próprio estudante"
ON student_phonics_attempt_answers FOR SELECT
TO authenticated
USING (EXISTS (
  SELECT 1 FROM student_phonics_attempts
  WHERE id = attempt_id AND student_id = auth.uid()
));

CREATE POLICY "Respostas podem ser inseridas pelo próprio estudante"
ON student_phonics_attempt_answers FOR INSERT
TO authenticated
WITH CHECK (EXISTS (
  SELECT 1 FROM student_phonics_attempts
  WHERE id = attempt_id AND student_id = auth.uid()
));

-- Políticas para tipos de conquistas
CREATE POLICY "Tipos de conquistas visíveis para usuários autenticados"
ON achievement_types FOR SELECT
TO authenticated
USING (true);

-- Políticas para conquistas
CREATE POLICY "Conquistas visíveis para usuários autenticados"
ON phonics_achievements FOR SELECT
TO authenticated
USING (true);

-- Políticas para conquistas do estudante
CREATE POLICY "Conquistas do estudante visíveis apenas para o próprio estudante"
ON student_phonics_achievements FOR SELECT
TO authenticated
USING (auth.uid() = student_id);

CREATE POLICY "Conquistas podem ser inseridas pelo próprio estudante"
ON student_phonics_achievements FOR INSERT
TO authenticated
WITH CHECK (auth.uid() = student_id); 