-- WARNING: This schema is for context only and is not meant to be run.
-- Table order and constraints may not be valid for execution.

CREATE TABLE public.attendee_preferences (
  pref_id bigint GENERATED ALWAYS AS IDENTITY NOT NULL UNIQUE,
  pref_name character varying NOT NULL DEFAULT ''::character varying,
  CONSTRAINT attendee_preferences_pkey PRIMARY KEY (pref_id)
);
CREATE TABLE public.attendee_profiles (
  user_id uuid NOT NULL UNIQUE,
  first_name text NOT NULL,
  last_name text NOT NULL,
  phone_number text,
  age_bracket text,
  gender text,
  marital_status text,
  bio text,
  social_links jsonb,
  profile_image_url text,
  preferences jsonb,
  created_at timestamp with time zone DEFAULT now(),
  updated_at timestamp with time zone DEFAULT now(),
  email text,
  CONSTRAINT attendee_profiles_pkey PRIMARY KEY (user_id),
  CONSTRAINT attendee_profiles_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.event_attendance (
  id bigint GENERATED ALWAYS AS IDENTITY NOT NULL,
  event_id bigint NOT NULL,
  user_id uuid NOT NULL,
  status USER-DEFINED NOT NULL,
  created_at timestamp with time zone DEFAULT now(),
  CONSTRAINT event_attendance_pkey PRIMARY KEY (id),
  CONSTRAINT event_attendance_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id),
  CONSTRAINT event_attendance_event_id_fkey FOREIGN KEY (event_id) REFERENCES public.events(id)
);
CREATE TABLE public.event_comments (
  id bigint GENERATED ALWAYS AS IDENTITY NOT NULL,
  created_at timestamp with time zone NOT NULL DEFAULT now(),
  commentor_id uuid DEFAULT auth.uid(),
  event_id bigint,
  comment_text character varying DEFAULT ''::character varying,
  commentor_name character varying,
  CONSTRAINT event_comments_pkey PRIMARY KEY (id),
  CONSTRAINT event_comments_event_id_fkey FOREIGN KEY (event_id) REFERENCES public.events(id)
);
CREATE TABLE public.event_types (
  type_id bigint GENERATED ALWAYS AS IDENTITY NOT NULL,
  type_name character varying NOT NULL DEFAULT ''::character varying,
  type_image_url character varying NOT NULL DEFAULT ''::character varying,
  CONSTRAINT event_types_pkey PRIMARY KEY (type_id)
);
CREATE TABLE public.events (
  id bigint GENERATED ALWAYS AS IDENTITY NOT NULL,
  created_at timestamp with time zone NOT NULL DEFAULT now(),
  name character varying DEFAULT ''::character varying,
  description character varying DEFAULT ''::character varying,
  type_id bigint,
  organizer_email character varying DEFAULT ''::character varying,
  organizer_contact_num character varying DEFAULT ''::character varying,
  location USER-DEFINED,
  starting_timestamp timestamp without time zone,
  street_address character varying DEFAULT ''::character varying,
  media jsonb DEFAULT '"[]"'::jsonb,
  whos_allowed character varying DEFAULT '"Everyone"'::character varying,
  organizer_id uuid DEFAULT auth.uid(),
  type_name character varying DEFAULT ''::character varying,
  ticket_price bigint,
  ticket_link character varying,
  organizer_name character varying DEFAULT ''::character varying,
  CONSTRAINT events_pkey PRIMARY KEY (id),
  CONSTRAINT events_type_id_fkey FOREIGN KEY (type_id) REFERENCES public.event_types(type_id)
);
CREATE TABLE public.follows (
  id bigint GENERATED ALWAYS AS IDENTITY NOT NULL,
  followed_at timestamp with time zone NOT NULL DEFAULT now(),
  follower_id uuid NOT NULL DEFAULT auth.uid(),
  followee_id character varying DEFAULT ''::character varying,
  CONSTRAINT follows_pkey PRIMARY KEY (id),
  CONSTRAINT follows_follower_id_fkey FOREIGN KEY (follower_id) REFERENCES public.attendee_profiles(user_id)
);
CREATE TABLE public.notifications (
  id integer NOT NULL DEFAULT nextval('notifications_id_seq'::regclass),
  created_at timestamp with time zone DEFAULT now(),
  title character varying NOT NULL,
  message text NOT NULL,
  audience character varying NOT NULL,
  event_id integer,
  user_ids ARRAY,
  action_url text,
  status character varying DEFAULT 'pending'::character varying,
  sent_at timestamp with time zone,
  read_count integer DEFAULT 0,
  sender_id uuid,
  metadata jsonb,
  CONSTRAINT notifications_pkey PRIMARY KEY (id),
  CONSTRAINT notifications_event_id_fkey FOREIGN KEY (event_id) REFERENCES public.events(id),
  CONSTRAINT notifications_sender_id_fkey FOREIGN KEY (sender_id) REFERENCES auth.users(id)
);
CREATE TABLE public.organizer_company_profiles (
  user_id uuid NOT NULL,
  company_name text NOT NULL,
  company_email text NOT NULL UNIQUE,
  phone_number text NOT NULL,
  contact_person_first_name text NOT NULL,
  contact_person_last_name text NOT NULL,
  contact_person_email text NOT NULL,
  contact_person_phone_number text NOT NULL,
  contact_person_designation text NOT NULL,
  company_state text NOT NULL,
  company_city text NOT NULL,
  company_address text NOT NULL,
  company_logo_url text,
  company_bio text,
  event_types jsonb DEFAULT '[]'::jsonb,
  created_at timestamp with time zone DEFAULT now(),
  updated_at timestamp with time zone DEFAULT now(),
  social_links jsonb DEFAULT '[]'::jsonb,
  CONSTRAINT organizer_company_profiles_pkey PRIMARY KEY (user_id),
  CONSTRAINT organizer_company_profiles_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.organizer_individual_profiles (
  user_id uuid NOT NULL,
  first_name text NOT NULL,
  last_name text NOT NULL,
  email text NOT NULL UNIQUE,
  phone_number text NOT NULL,
  age_bracket text,
  event_types jsonb DEFAULT '[]'::jsonb,
  bio text,
  profile_image_url text,
  created_at timestamp with time zone DEFAULT now(),
  updated_at timestamp with time zone DEFAULT now(),
  social_links jsonb DEFAULT '[]'::jsonb,
  CONSTRAINT organizer_individual_profiles_pkey PRIMARY KEY (user_id),
  CONSTRAINT organizer_individual_profiles_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.spatial_ref_sys (
  srid integer NOT NULL CHECK (srid > 0 AND srid <= 998999),
  auth_name character varying,
  auth_srid integer,
  srtext character varying,
  proj4text character varying,
  CONSTRAINT spatial_ref_sys_pkey PRIMARY KEY (srid)
);
CREATE TABLE public.user_fcm_tokens (
  user_id uuid NOT NULL,
  fcm_token text NOT NULL,
  updated_at timestamp without time zone DEFAULT now(),
  CONSTRAINT user_fcm_tokens_pkey PRIMARY KEY (user_id),
  CONSTRAINT user_fcm_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.user_notification_preferences (
  user_id uuid NOT NULL,
  new_events boolean DEFAULT true,
  event_reminders boolean DEFAULT true,
  event_updates boolean DEFAULT true,
  event_cancellations boolean DEFAULT true,
  organizer_updates boolean DEFAULT false,
  updated_at timestamp without time zone DEFAULT now(),
  CONSTRAINT user_notification_preferences_pkey PRIMARY KEY (user_id),
  CONSTRAINT user_notification_preferences_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.user_notifications (
  id uuid NOT NULL DEFAULT gen_random_uuid(),
  user_id uuid,
  title text NOT NULL,
  body text NOT NULL,
  type text NOT NULL,
  priority text DEFAULT 'normal'::text,
  event_id bigint,
  organizer_id text,
  image_url text,
  data jsonb,
  is_read boolean DEFAULT false,
  is_actionable boolean DEFAULT false,
  action_url text,
  action_text text,
  created_at timestamp without time zone DEFAULT now(),
  CONSTRAINT user_notifications_pkey PRIMARY KEY (id),
  CONSTRAINT user_notifications_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id),
  CONSTRAINT user_notifications_event_id_fkey FOREIGN KEY (event_id) REFERENCES public.events(id)
);