-- Table for storing contacts information
CREATE TABLE contacts (
    tenant_id UUID,
    contact_id UUID DEFAULT gen_random_uuid(),
    email VARCHAR(255) NOT NULL,
    first_name VARCHAR(100),
    last_name VARCHAR(100),
    phone_number VARCHAR(20),
    description TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (tenant_id, contact_id),
    FOREIGN KEY (tenant_id) REFERENCES tenants(id)
);
-- Table for storing campaign information
CREATE TABLE campaigns (
    tenant_id UUID,
    campaign_id UUID DEFAULT gen_random_uuid(),
    name VARCHAR(255) NOT NULL,
    description TEXT,
    start_date DATE,
    status VARCHAR(50) DEFAULT 'draft',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    vector_embedding VECTOR(768), -- Adjust the dimensions as needed
    PRIMARY KEY (tenant_id, campaign_id),
    FOREIGN KEY (tenant_id) REFERENCES tenants(id)
);
-- Table for mapping contacts to campaigns
CREATE TABLE campaign_contacts (
    tenant_id UUID,
    campaign_id UUID,
    contact_id UUID,
    PRIMARY KEY (tenant_id, campaign_id, contact_id),
    FOREIGN KEY (tenant_id, campaign_id) REFERENCES campaigns(tenant_id, campaign_id),
    FOREIGN KEY (tenant_id, contact_id) REFERENCES contacts(tenant_id, contact_id)
);
-- Table for storing information about campaign emails
CREATE TABLE campaign_emails (
    tenant_id UUID,
    campaign_id UUID,
    email_id UUID DEFAULT gen_random_uuid(),
    subject VARCHAR(255),
    body TEXT,
    sent_date TIMESTAMP,
    vector_embedding VECTOR(768), -- Adjust the dimensions as needed
    PRIMARY KEY (tenant_id, campaign_id),
    FOREIGN KEY (tenant_id, campaign_id) REFERENCES campaigns(tenant_id, campaign_id)
);
-- Table for storing campaign performance analytics
CREATE TABLE campaign_analytics (
    tenant_id UUID,
    campaign_id UUID,
    analytics_id UUID DEFAULT gen_random_uuid(),
    email_sent_count INT DEFAULT 0,
    email_opened_count INT DEFAULT 0,
    link_clicked_count INT DEFAULT 0,
    conversions INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (tenant_id, campaign_id, analytics_id),
    FOREIGN KEY (tenant_id, campaign_id) REFERENCES campaigns(tenant_id, campaign_id)
);