from api.models import EsStudent, EsStudentGroup, EsStudentStudentGroup


def resolve_student_group_id(tt_student_set_id):
    if not tt_student_set_id:
        return None
    group = EsStudentGroup.objects.filter(tt_id=tt_student_set_id).first()
    return group.id if group else None


def resolve_student_group_ids_from_row(row):
    if "student_set" not in row:
        return None

    group_ids = []
    seen = set()
    for tt_id in row.get("student_set") or []:
        group_id = resolve_student_group_id(tt_id)
        if group_id and group_id not in seen:
            seen.add(group_id)
            group_ids.append(group_id)
    return group_ids


def replace_student_group_rows(student_id, group_ids):
    if not student_id or not EsStudent.objects.filter(id=student_id).exists():
        return 0

    group_ids = [group_id for group_id in (group_ids or []) if group_id]
    EsStudentStudentGroup.objects.filter(student_id=student_id).delete()
    rows = [
        EsStudentStudentGroup(student_id=student_id, student_group_id=group_id)
        for group_id in group_ids
    ]
    if rows:
        EsStudentStudentGroup.objects.bulk_create(rows, batch_size=500, ignore_conflicts=True)

    default_group_id = group_ids[-1] if group_ids else None
    EsStudent.objects.filter(id=student_id).update(student_group_id=default_group_id)
    return len(rows)
