-- Script pour appliquer la fonction replace_participant_votes
-- À exécuter dans votre base de données Supabase

-- Fonction pour remplacer tous les votes d'un participant de manière atomique
CREATE OR REPLACE FUNCTION replace_participant_votes(
    p_campaign_id UUID,
    p_participant_id UUID,
    p_votes JSONB
)
RETURNS VOID AS $$
DECLARE
    vote_record RECORD;
BEGIN
    -- Commencer une transaction
    BEGIN
        -- Supprimer tous les votes existants pour ce participant dans cette campagne
        DELETE FROM votes 
        WHERE campaign_id = p_campaign_id 
        AND participant_id = p_participant_id;
        
        -- Insérer les nouveaux votes
        FOR vote_record IN 
            SELECT * FROM jsonb_array_elements(p_votes)
        LOOP
            INSERT INTO votes (campaign_id, participant_id, proposition_id, amount)
            VALUES (
                p_campaign_id,
                p_participant_id,
                (vote_record.value->>'proposition_id')::UUID,
                (vote_record.value->>'amount')::INTEGER
            );
        END LOOP;
        
        -- La transaction sera automatiquement commitée si tout va bien
    EXCEPTION
        WHEN OTHERS THEN
            -- En cas d'erreur, la transaction sera automatiquement rollbackée
            RAISE EXCEPTION 'Erreur lors du remplacement des votes: %', SQLERRM;
    END;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
