import React from 'react';
import PropTypes from 'prop-types';
import NumberInput from '@ui/NumberInput';
import {useSorting} from '@hooks/useSorting';
import SortDropdown from '@ui/SortDropdown';
import {
Music,
Tv,
Users,
Cloud,
Film,
HardDrive,
Maximize,
Globe,
Video,
Flag,
Zap,
Package,
List
} from 'lucide-react';
const AdvancedView = ({formats, onScoreChange}) => {
const sortOptions = [
{label: 'Name', value: 'name'},
{label: 'Score', value: 'score'}
];
// Group formats by their tags
const groupedFormats = formats.reduce((acc, format) => {
// Check if format has any tags that match our known categories
const hasKnownTag = format.tags?.some(
tag =>
tag.includes('Audio') ||
tag.includes('Codec') ||
tag.includes('Enhancement') ||
tag.includes('HDR') ||
tag.includes('Flag') ||
tag.includes('Language') ||
(tag.includes('Release Group') && !tag.includes('Tier')) ||
tag.includes('Release Group Tier') ||
tag.includes('Resolution') ||
tag.includes('Source') ||
tag.includes('Storage') ||
tag.includes('Streaming Service')
);
if (!hasKnownTag) {
if (!acc['Uncategorized']) acc['Uncategorized'] = [];
acc['Uncategorized'].push(format);
return acc;
}
format.tags.forEach(tag => {
if (!acc[tag]) acc[tag] = [];
acc[tag].push(format);
});
return acc;
}, {});
const formatGroups = {
Audio: Object.entries(groupedFormats)
.filter(([tag]) => tag.includes('Audio'))
.flatMap(([_, formats]) => formats),
Codecs: Object.entries(groupedFormats)
.filter(([tag]) => tag.includes('Codec'))
.flatMap(([_, formats]) => formats),
Enhancements: Object.entries(groupedFormats)
.filter(([tag]) => tag.includes('Enhancement'))
.flatMap(([_, formats]) => formats),
HDR: Object.entries(groupedFormats)
.filter(([tag]) => tag.includes('HDR'))
.flatMap(([_, formats]) => formats),
'Indexer Flags': Object.entries(groupedFormats)
.filter(([tag]) => tag.includes('Flag'))
.flatMap(([_, formats]) => formats),
Language: Object.entries(groupedFormats)
.filter(([tag]) => tag.includes('Language'))
.flatMap(([_, formats]) => formats),
'Release Groups': Object.entries(groupedFormats)
.filter(
([tag]) =>
tag.includes('Release Group') && !tag.includes('Tier')
)
.flatMap(([_, formats]) => formats),
'Group Tier Lists': Object.entries(groupedFormats)
.filter(([tag]) => tag.includes('Release Group Tier'))
.flatMap(([_, formats]) => formats),
Resolution: Object.entries(groupedFormats)
.filter(([tag]) => tag.includes('Resolution'))
.flatMap(([_, formats]) => formats),
Source: Object.entries(groupedFormats)
.filter(([tag]) => tag.includes('Source'))
.flatMap(([_, formats]) => formats),
Storage: Object.entries(groupedFormats)
.filter(([tag]) => tag.includes('Storage'))
.flatMap(([_, formats]) => formats),
'Streaming Services': Object.entries(groupedFormats)
.filter(([tag]) => tag.includes('Streaming Service'))
.flatMap(([_, formats]) => formats),
Uncategorized: groupedFormats['Uncategorized'] || []
};
const getGroupIcon = groupName => {
const icons = {
Audio: ,
'Streaming Services':
{format.name}