from dataclasses import dataclass from enum import Enum from typing import Tuple from serato_doctor.models.track import DiskTrack class DuplicateKind(str, Enum): EXACT_NAME = "exact_name" CLOUD_CONFLICT = "cloud_conflict" @dataclass(frozen=True) class DuplicateGroup: """A deterministic group of files that warrants duplicate review.""" kind: DuplicateKind comparison_key: str tracks: Tuple[DiskTrack, ...] @property def extra_files(self) -> int: return max(0, len(self.tracks) - 1) @property def display_name(self) -> str: return min( (track.filename for track in self.tracks), key=lambda name: (len(name), name.casefold()), )