CREATE OR REPLACE FUNCTION public.fn_professor_save_session_zoom(p_session_id integer, p_zoom_meeting_id text, p_zoom_join_url text, p_participants jsonb)
 RETURNS jsonb
 LANGUAGE plpgsql
AS $function$
BEGIN
  UPDATE public.sessions
  SET zoom_meeting_id = p_zoom_meeting_id,
      zoom_join_url   = p_zoom_join_url
  WHERE session_id = p_session_id;

  INSERT INTO public.session_participants
      (session_id, participant_type, partner_id, email, full_name,
       breakout_room, zoom_registrant_id, zoom_join_url)
  SELECT
      p_session_id,
      (p->>'participant_type')::participant_type,
      (p->>'partner_id')::bigint,
      p->>'email',
      p->>'full_name',
      p->>'breakout_room',
      NULLIF(p->>'zoom_registrant_id', ''),
      NULLIF(p->>'zoom_join_url', '')
  FROM jsonb_array_elements(p_participants) AS p
  ON CONFLICT (session_id, email) DO UPDATE
      SET participant_type   = EXCLUDED.participant_type,
          breakout_room      = EXCLUDED.breakout_room,
          zoom_registrant_id = EXCLUDED.zoom_registrant_id,
          zoom_join_url      = EXCLUDED.zoom_join_url;

  RETURN jsonb_build_object('success', true);
END;
$function$
;
