drop function if exists "public"."create_event"(p_name text, p_date date, p_email_subject text, p_email_body text, p_sheet_id text, p_name_column integer, p_surname_column integer, p_email_column integer, p_confirmation_column integer);

drop function if exists "public"."participant_emailed"(p_participant_id uuid, p_sent boolean);

drop function if exists "public"."participants_add_bulk"(p_event uuid, p_names text[], p_surnames text[], p_emails text[]);

drop index if exists "public"."participants_event_name_surname_email_uidx";

alter table "public"."events" drop column "confirmation_column";

alter table "public"."events" drop column "email_column";

alter table "public"."events" drop column "name_column";

alter table "public"."events" drop column "surname_column";

alter table "public"."participants" drop column "email_sent";

set check_function_bodies = off;

CREATE OR REPLACE FUNCTION public.create_event(p_name text, p_date date)
 RETURNS events
 LANGUAGE plpgsql
 SECURITY DEFINER
 SET search_path TO 'public'
AS $function$
declare
  v_user    uuid := auth.uid();                     -- current user
  v_section uuid;                                   -- their section_id
  v_evt     public.events%rowtype;                  -- the inserted event
begin
  -- 1) lookup the user's section
  select section_id
    into v_section
    from public.profiles
   where id = v_user;

  if v_section is null then
    raise exception 'no profile/section found for user %', v_user;
  end if;

  -- 2) insert into events, filling created_by and section_id
  insert into public.events (
    name,
    date,
    created_by,
    section_id
  )
  values (
    p_name,
    p_date,
    v_user,
    v_section
  )
  returning * into v_evt;

  -- 3) return the full row
  return v_evt;
end;
$function$
;

CREATE OR REPLACE FUNCTION public.create_qrcodes_bulk(p_section_id uuid, p_event_id uuid, p_names text[], p_surnames text[], p_emails text[])
 RETURNS SETOF participants
 LANGUAGE plpgsql
 SECURITY DEFINER
 SET search_path TO 'public', 'pg_temp'
AS $function$BEGIN
    -----------------------------------------------------------------
    -- 1) keep the array-length check exactly as before
    -----------------------------------------------------------------
    IF array_length(p_names, 1)  IS DISTINCT FROM
       array_length(p_surnames,1) OR
       array_length(p_names, 1)  IS DISTINCT FROM
       array_length(p_emails,  1) THEN
       RAISE EXCEPTION
         'Names, surnames and emails arrays must all be the same length';
    END IF;

    RETURN QUERY
    INSERT INTO public.participants (section_id, event, name, surname, email)
    SELECT  p_section_id,
            p_event_id,
            n, s, e
    FROM   unnest(p_names, p_surnames, p_emails) AS u(n, s, e)
    RETURNING *;
END;$function$
;


