-- Create company profile table CREATE TABLE public.company_profile ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), company_name TEXT NOT NULL, company_logo_url TEXT, address_line1 TEXT, address_line2 TEXT, city TEXT, state TEXT, postal_code TEXT, country TEXT, phone TEXT, email TEXT, website TEXT, tax_id TEXT, registration_number TEXT, industry TEXT, employee_count INTEGER, founded_year INTEGER, description TEXT, timezone TEXT DEFAULT 'UTC', currency TEXT DEFAULT 'USD', updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now() ); -- Create email settings table for SMTP/IMAP CREATE TABLE public.email_settings ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), smtp_host TEXT NOT NULL, smtp_port INTEGER NOT NULL DEFAULT 587, smtp_username TEXT NOT NULL, smtp_password TEXT NOT NULL, smtp_encryption TEXT NOT NULL DEFAULT 'tls', -- 'tls', 'ssl', 'none' smtp_from_email TEXT NOT NULL, smtp_from_name TEXT NOT NULL, imap_host TEXT, imap_port INTEGER DEFAULT 993, imap_username TEXT, imap_password TEXT, imap_encryption TEXT DEFAULT 'ssl', is_enabled BOOLEAN NOT NULL DEFAULT false, updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now() ); -- Create SMS gateway settings table CREATE TABLE public.sms_settings ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), provider TEXT NOT NULL, -- 'twilio', 'nexmo', 'textlocal', 'custom' api_key TEXT NOT NULL, api_secret TEXT, sender_id TEXT, base_url TEXT, -- for custom providers webhook_url TEXT, is_enabled BOOLEAN NOT NULL DEFAULT false, updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now() ); -- Create WhatsApp Business API settings table CREATE TABLE public.whatsapp_settings ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), provider TEXT NOT NULL DEFAULT 'meta', -- 'meta', 'twilio', 'custom' phone_number_id TEXT NOT NULL, access_token TEXT NOT NULL, business_account_id TEXT, webhook_verify_token TEXT, webhook_url TEXT, is_enabled BOOLEAN NOT NULL DEFAULT false, updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now() ); -- Create notification preferences table CREATE TABLE public.notification_settings ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), email_notifications BOOLEAN NOT NULL DEFAULT true, sms_notifications BOOLEAN NOT NULL DEFAULT false, whatsapp_notifications BOOLEAN NOT NULL DEFAULT false, push_notifications BOOLEAN NOT NULL DEFAULT true, notification_types JSONB DEFAULT '{"reminders": true, "payments": true, "system": true, "security": true}', updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now() ); -- Enable RLS on all tables ALTER TABLE public.company_profile ENABLE ROW LEVEL SECURITY; ALTER TABLE public.email_settings ENABLE ROW LEVEL SECURITY; ALTER TABLE public.sms_settings ENABLE ROW LEVEL SECURITY; ALTER TABLE public.whatsapp_settings ENABLE ROW LEVEL SECURITY; ALTER TABLE public.notification_settings ENABLE ROW LEVEL SECURITY; -- Create policies (admin only access) CREATE POLICY "Admins can manage company profile" ON public.company_profile FOR ALL USING (has_role(auth.uid(), 'admin'::app_role)); CREATE POLICY "Anyone can read company profile" ON public.company_profile FOR SELECT USING (true); CREATE POLICY "Admins can manage email settings" ON public.email_settings FOR ALL USING (has_role(auth.uid(), 'admin'::app_role)); CREATE POLICY "Admins can manage SMS settings" ON public.sms_settings FOR ALL USING (has_role(auth.uid(), 'admin'::app_role)); CREATE POLICY "Admins can manage WhatsApp settings" ON public.whatsapp_settings FOR ALL USING (has_role(auth.uid(), 'admin'::app_role)); CREATE POLICY "Admins can manage notification settings" ON public.notification_settings FOR ALL USING (has_role(auth.uid(), 'admin'::app_role)); CREATE POLICY "Anyone can read notification settings" ON public.notification_settings FOR SELECT USING (true); -- Insert default records INSERT INTO public.company_profile ( company_name, email, timezone, currency ) VALUES ( 'Your Company Name', 'admin@company.com', 'UTC', 'USD' ); INSERT INTO public.notification_settings DEFAULT VALUES;