-- #411 R3 bugfix: the five discovery mixes (deep_cuts, rediscover,
-- new_for_you, on_this_day, first_listens) were added as producers +
-- registry entries but their system_variant values were never added
-- to the two playlists CHECK constraints. Result: insertSystemPlaylist
-- for any new mix fails with playlists_kind_variant_consistent
-- (SQLSTATE 23514), which — because BuildSystemPlaylists is one
-- all-or-nothing transaction — aborts the WHOLE build, so For-You /
-- Discover refresh 500s and the lazy daily build fails too.
--
-- All five are seedless (like for_you/discover): seed_artist_id IS
-- NULL. Drop + re-add both constraints with the expanded set, same
-- pattern as 0021_discover_variant (Postgres has no ALTER CONSTRAINT
-- for CHECK).

ALTER TABLE playlists DROP CONSTRAINT IF EXISTS playlists_kind_variant_consistent;
ALTER TABLE playlists
    ADD CONSTRAINT playlists_kind_variant_consistent CHECK (
        (kind = 'user'   AND system_variant IS NULL)
        OR
        (kind = 'system' AND system_variant IN (
            'for_you', 'songs_like_artist', 'discover',
            'deep_cuts', 'rediscover', 'new_for_you',
            'on_this_day', 'first_listens'
        ))
    );

ALTER TABLE playlists DROP CONSTRAINT IF EXISTS playlists_seed_consistent;
ALTER TABLE playlists
    ADD CONSTRAINT playlists_seed_consistent CHECK (
        (system_variant IS NULL                 AND seed_artist_id IS NULL)
        OR
        (system_variant = 'for_you'             AND seed_artist_id IS NULL)
        OR
        (system_variant = 'discover'            AND seed_artist_id IS NULL)
        OR
        (system_variant = 'deep_cuts'           AND seed_artist_id IS NULL)
        OR
        (system_variant = 'rediscover'          AND seed_artist_id IS NULL)
        OR
        (system_variant = 'new_for_you'         AND seed_artist_id IS NULL)
        OR
        (system_variant = 'on_this_day'         AND seed_artist_id IS NULL)
        OR
        (system_variant = 'first_listens'       AND seed_artist_id IS NULL)
        OR
        (system_variant = 'songs_like_artist'   AND seed_artist_id IS NOT NULL)
    );
