-- Put back "theme_preference" column
ALTER TABLE users ADD COLUMN IF NOT EXISTS
  theme_preference text DEFAULT ''::text NOT NULL;

-- Copy "theme_preference" back to "users"
UPDATE users
	-- Use COALESCE(SELECT, <default>) to avoid forcing an insert of user_configs
	-- for every users insert in order for this down migration to succeed.
	SET theme_preference = COALESCE(
		(SELECT value FROM user_configs WHERE user_configs.user_id = users.id AND user_configs.key = 'theme_preference'),
		''
	);

-- Drop the "user_configs" table.
DROP TABLE user_configs;

-- Replace "group_members_expanded", and bring back with "theme_preference"
DROP VIEW group_members_expanded;
-- Taken from 000242_group_members_view.up.sql
CREATE VIEW
	group_members_expanded
AS
-- If the group is a user made group, then we need to check the group_members table.
-- If it is the "Everyone" group, then we need to check the organization_members table.
WITH all_members AS (
	SELECT user_id, group_id FROM group_members
	UNION
	SELECT user_id, organization_id AS group_id FROM organization_members
)
SELECT
	users.id AS user_id,
	users.email AS user_email,
	users.username AS user_username,
	users.hashed_password AS user_hashed_password,
	users.created_at AS user_created_at,
	users.updated_at AS user_updated_at,
	users.status AS user_status,
	users.rbac_roles AS user_rbac_roles,
	users.login_type AS user_login_type,
	users.avatar_url AS user_avatar_url,
	users.deleted AS user_deleted,
	users.last_seen_at AS user_last_seen_at,
	users.quiet_hours_schedule AS user_quiet_hours_schedule,
	users.theme_preference AS user_theme_preference,
	users.name AS user_name,
	users.github_com_user_id AS user_github_com_user_id,
	groups.organization_id AS organization_id,
	groups.name AS group_name,
	all_members.group_id AS group_id
FROM
	all_members
JOIN
	users ON users.id = all_members.user_id
JOIN
	groups ON groups.id = all_members.group_id
WHERE
	users.deleted = 'false';

COMMENT ON VIEW group_members_expanded IS 'Joins group members with user information, organization ID, group name. Includes both regular group members and organization members (as part of the "Everyone" group).';
