-- Communication Plugin Database Schema
-- This schema is isolated to the plugin_communication namespace

-- Create plugin schema
CREATE SCHEMA IF NOT EXISTS plugin_communication;

-- Messages table
CREATE TABLE IF NOT EXISTS plugin_communication.messages (
  id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
  site_id UUID REFERENCES sites(id) ON DELETE CASCADE,
  sender_id UUID REFERENCES users(id),
  recipient VARCHAR(255) NOT NULL,
  subject VARCHAR(255),
  content TEXT,
  type VARCHAR(20) DEFAULT 'email', -- email, sms, push
  status VARCHAR(20) DEFAULT 'pending', -- pending, sent, failed, scheduled
  scheduled_at TIMESTAMP WITH TIME ZONE,
  sent_at TIMESTAMP WITH TIME ZONE,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
  updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- Notifications table
CREATE TABLE IF NOT EXISTS plugin_communication.notifications (
  id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
  site_id UUID REFERENCES sites(id) ON DELETE CASCADE,
  user_id UUID REFERENCES users(id),
  title VARCHAR(255) NOT NULL,
  message TEXT,
  type VARCHAR(20) DEFAULT 'info', -- info, warning, error, success
  is_read BOOLEAN DEFAULT false,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- Templates table
CREATE TABLE IF NOT EXISTS plugin_communication.templates (
  id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
  site_id UUID REFERENCES sites(id) ON DELETE CASCADE,
  name VARCHAR(255) NOT NULL,
  subject VARCHAR(255),
  content TEXT,
  type VARCHAR(20) DEFAULT 'email', -- email, sms
  is_active BOOLEAN DEFAULT true,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
  updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- Scheduled messages table
CREATE TABLE IF NOT EXISTS plugin_communication.scheduled_messages (
  id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
  site_id UUID REFERENCES sites(id) ON DELETE CASCADE,
  message_id UUID REFERENCES plugin_communication.messages(id) ON DELETE CASCADE,
  scheduled_at TIMESTAMP WITH TIME ZONE NOT NULL,
  status VARCHAR(20) DEFAULT 'pending', -- pending, sent, cancelled
  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- Create indexes for better performance
CREATE INDEX IF NOT EXISTS idx_plugin_communication_messages_site_id 
ON plugin_communication.messages(site_id);

CREATE INDEX IF NOT EXISTS idx_plugin_communication_messages_status 
ON plugin_communication.messages(status);

CREATE INDEX IF NOT EXISTS idx_plugin_communication_messages_created_at 
ON plugin_communication.messages(created_at);

CREATE INDEX IF NOT EXISTS idx_plugin_communication_notifications_site_id 
ON plugin_communication.notifications(site_id);

CREATE INDEX IF NOT EXISTS idx_plugin_communication_notifications_user_id 
ON plugin_communication.notifications(user_id);

CREATE INDEX IF NOT EXISTS idx_plugin_communication_notifications_is_read 
ON plugin_communication.notifications(is_read);

CREATE INDEX IF NOT EXISTS idx_plugin_communication_templates_site_id 
ON plugin_communication.templates(site_id);

CREATE INDEX IF NOT EXISTS idx_plugin_communication_templates_type 
ON plugin_communication.templates(type);

CREATE INDEX IF NOT EXISTS idx_plugin_communication_scheduled_messages_scheduled_at 
ON plugin_communication.scheduled_messages(scheduled_at);

CREATE INDEX IF NOT EXISTS idx_plugin_communication_scheduled_messages_status 
ON plugin_communication.scheduled_messages(status); 