from collections import defaultdict

from reviews.models import Article
from rsl.services.slug import slugify


def find_duplicate_groups(review) -> dict[str, list[Article]]:
    groups: dict[str, list[Article]] = defaultdict(list)
    for article in Article.objects.filter(review_id=review.id).all():
        key = slugify(article.title or "")
        if key:
            groups[key].append(article)
    return {k: v for k, v in groups.items() if len(v) > 1}


def resolve_all_duplicates(review) -> int:
    groups = find_duplicate_groups(review)
    resolved = 0
    for articles in groups.values():
        articles.sort(key=lambda a: a.id)
        for duplicate in articles[1:]:
            if duplicate.status != "D":
                duplicate.status = "D"
                resolved += 1
    
    return resolved
