-- +goose Up
-- We need to make it possible to have multiple relationships relating phone numbers, a global asset,
-- to cantacts, an organization-specific asset.

-- Step 1: Drop the existing primary key constraint on e164
ALTER TABLE comms.contact_phone 
DROP CONSTRAINT contact_phone_pkey;

-- Step 2: Add new ID column with SERIAL type (auto-generates sequence)
ALTER TABLE comms.contact_phone 
ADD COLUMN id SERIAL;

-- Step 3: Set the new ID column as the primary key
ALTER TABLE comms.contact_phone 
ADD PRIMARY KEY (id);

-- Step 4: Add foreign key constraint on e164 referencing comms.phone
ALTER TABLE comms.contact_phone 
ADD CONSTRAINT contact_phone_e164_fkey 
FOREIGN KEY (e164) REFERENCES comms.phone(e164);

-- Step 5 (Optional but recommended): Add an index on e164 for query performance
CREATE INDEX idx_contact_phone_e164 ON comms.contact_phone(e164);

CREATE TABLE comms.email (
	address TEXT NOT NULL,
	is_subscribed BOOLEAN NOT NULL,
	PRIMARY KEY(address)
);
INSERT INTO comms.email (
	address,
	is_subscribed
) SELECT
	address,
	FALSE
FROM comms.contact_email;
INSERT INTO comms.email (
	address,
	is_subscribed
) SELECT
	source,
	FALSE
FROM comms.email_log
ON CONFLICT (address) DO NOTHING;

-- Do the same thing to email, for exactly the same reasons
-- Step 1: Drop the existing primary key constraint on address
ALTER TABLE comms.contact_email 
DROP CONSTRAINT contact_email_pkey;

-- Step 2: Add new ID column with SERIAL type (auto-generates sequence)
ALTER TABLE comms.contact_email 
ADD COLUMN id SERIAL;

-- Step 3: Set the new ID column as the primary key
ALTER TABLE comms.contact_email 
ADD PRIMARY KEY (id);

-- Step 4: Add foreign key constraint on address referencing comms.email
ALTER TABLE comms.contact_email 
ADD CONSTRAINT contact_email_address_fkey 
FOREIGN KEY (address) REFERENCES comms.email(address);

-- Step 5 (Optional but recommended): Add an index on address for query performance
CREATE INDEX idx_contact_email_address ON comms.contact_email(address);
