-- Drops AWARD_MASTER from the UserRole enum.
--
-- Any row still holding AWARD_MASTER is demoted to JURY_MEMBER (singular role)
-- or filtered out of the roles[] array (multi-role) before the enum swap, so
-- the type alteration is safe even if the prod migration was missed.

UPDATE "User" SET role = 'JURY_MEMBER' WHERE role = 'AWARD_MASTER';
UPDATE "User" SET roles = array_remove(roles, 'AWARD_MASTER') WHERE 'AWARD_MASTER' = ANY(roles);

CREATE TYPE "UserRole_new" AS ENUM (
    'SUPER_ADMIN',
    'PROGRAM_ADMIN',
    'JURY_MEMBER',
    'MENTOR',
    'OBSERVER',
    'APPLICANT',
    'AUDIENCE'
);

ALTER TABLE "User" ALTER COLUMN role DROP DEFAULT;
ALTER TABLE "User"
    ALTER COLUMN role TYPE "UserRole_new" USING role::text::"UserRole_new";
ALTER TABLE "User" ALTER COLUMN role SET DEFAULT 'APPLICANT';

ALTER TABLE "User" ALTER COLUMN roles DROP DEFAULT;
ALTER TABLE "User"
    ALTER COLUMN roles TYPE "UserRole_new"[] USING roles::text[]::"UserRole_new"[];
ALTER TABLE "User" ALTER COLUMN roles SET DEFAULT '{}'::"UserRole_new"[];

DROP TYPE "UserRole";
ALTER TYPE "UserRole_new" RENAME TO "UserRole";
