import { describe, expect, it } from 'vitest';

import { Playlist } from '@/state/clipStore';

import { canUserEditPlaylist } from './playlistConditionUtils';

/**
 * Create a mock playlist with sensible defaults
 */
function createMockPlaylist(overrides: Partial<Playlist> = {}): Playlist {
  return {
    id: 'test-playlist',
    current_page: 1,
    is_public: true,
    is_trashed: false,
    num_total_results: 0,
    playlist_clips: [],
    clipIds: [],
    description: null,
    dislike_count: 0,
    entity_type: 'playlist_schema',
    flag_count: 0,
    image_url: null,
    is_discover_playlist: false,
    is_owned: true,
    name: 'Test Playlist',
    next_cursor: null,
    play_count: 0,
    reaction: null,
    skip_count: 0,
    song_count: 0,
    upvote_count: 0,
    user_avatar_image_url: null,
    user_display_name: null,
    user_handle: null,
    ...overrides,
  };
}

describe('playlistConditionUtils', () => {
  describe('canUserEditPlaylist', () => {
    describe('when playlist is owned by user (is_owned === true)', () => {
      it('should return true for regular user-owned playlist', () => {
        const playlist = createMockPlaylist({
          id: 'user-playlist-123',
          is_owned: true,
        });
        expect(canUserEditPlaylist(playlist)).toBe(true);
      });

      it('should return false for user-owned "liked" playlist', () => {
        const playlist = createMockPlaylist({ id: 'liked', is_owned: true });
        expect(canUserEditPlaylist(playlist)).toBe(false);
      });

      it('should return false for all system playlists', () => {
        const systemPlaylistIds = [
          'liked',
          'on-repeat',
          'sharelist',
          'top_shorts',
          'new_songs_for_you',
          'following_listen',
          'engaged_user_top_songs',
          'suggested_creator_top_songs',
          'trending_creator_top_songs',
          'my_sharelist',
        ];

        systemPlaylistIds.forEach((id) => {
          const playlist = createMockPlaylist({ id, is_owned: true });
          expect(canUserEditPlaylist(playlist)).toBe(false);
        });
      });
    });

    describe('when playlist is not owned by user (is_owned === false)', () => {
      it('should return false for non-owned regular playlist', () => {
        const playlist = createMockPlaylist({
          id: 'other-user-playlist',
          is_owned: false,
        });
        expect(canUserEditPlaylist(playlist)).toBe(false);
      });

      it('should return false for non-owned read-only playlist', () => {
        const playlist = createMockPlaylist({ id: 'liked', is_owned: false });
        expect(canUserEditPlaylist(playlist)).toBe(false);
      });
    });
  });
});
