-- Corrige as políticas de segurança para análises de redação
DROP POLICY IF EXISTS "Edge Function pode inserir análises" ON public.essay_analyses;
DROP POLICY IF EXISTS "Alunos podem ver análises de suas próprias redações" ON public.essay_analyses;

-- Política para permitir que a service_role insira análises
CREATE POLICY "Service role pode inserir análises"
    ON public.essay_analyses FOR INSERT
    WITH CHECK (auth.jwt() ->> 'role' = 'service_role');

-- Política para permitir que alunos vejam suas análises
CREATE POLICY "Alunos podem ver suas análises"
    ON public.essay_analyses FOR SELECT
    USING (
        EXISTS (
            SELECT 1 
            FROM public.student_essays 
            WHERE id = essay_id 
            AND student_id = auth.uid()
        )
    );

-- Habilita RLS para tabelas relacionadas
ALTER TABLE public.essay_analysis_feedback ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.essay_analysis_strengths ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.essay_analysis_improvements ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.essay_analysis_scores ENABLE ROW LEVEL SECURITY;

-- Políticas para feedback
CREATE POLICY "Service role pode inserir feedback"
    ON public.essay_analysis_feedback FOR INSERT
    WITH CHECK (auth.jwt() ->> 'role' = 'service_role');

CREATE POLICY "Alunos podem ver feedback de suas análises"
    ON public.essay_analysis_feedback FOR SELECT
    USING (
        EXISTS (
            SELECT 1 
            FROM public.essay_analyses a
            JOIN public.student_essays e ON a.essay_id = e.id
            WHERE a.id = analysis_id 
            AND e.student_id = auth.uid()
        )
    );

-- Políticas para pontos fortes
CREATE POLICY "Service role pode inserir pontos fortes"
    ON public.essay_analysis_strengths FOR INSERT
    WITH CHECK (auth.jwt() ->> 'role' = 'service_role');

CREATE POLICY "Alunos podem ver pontos fortes de suas análises"
    ON public.essay_analysis_strengths FOR SELECT
    USING (
        EXISTS (
            SELECT 1 
            FROM public.essay_analyses a
            JOIN public.student_essays e ON a.essay_id = e.id
            WHERE a.id = analysis_id 
            AND e.student_id = auth.uid()
        )
    );

-- Políticas para pontos a melhorar
CREATE POLICY "Service role pode inserir pontos a melhorar"
    ON public.essay_analysis_improvements FOR INSERT
    WITH CHECK (auth.jwt() ->> 'role' = 'service_role');

CREATE POLICY "Alunos podem ver pontos a melhorar de suas análises"
    ON public.essay_analysis_improvements FOR SELECT
    USING (
        EXISTS (
            SELECT 1 
            FROM public.essay_analyses a
            JOIN public.student_essays e ON a.essay_id = e.id
            WHERE a.id = analysis_id 
            AND e.student_id = auth.uid()
        )
    );

-- Políticas para notas por critério
CREATE POLICY "Service role pode inserir notas"
    ON public.essay_analysis_scores FOR INSERT
    WITH CHECK (auth.jwt() ->> 'role' = 'service_role');

CREATE POLICY "Alunos podem ver notas de suas análises"
    ON public.essay_analysis_scores FOR SELECT
    USING (
        EXISTS (
            SELECT 1 
            FROM public.essay_analyses a
            JOIN public.student_essays e ON a.essay_id = e.id
            WHERE a.id = analysis_id 
            AND e.student_id = auth.uid()
        )
    ); 