package com.seer.teach.admin.convert;

import com.seer.teach.admin.response.VersionMappingResp;
import com.seer.teach.admin.response.VersionResp;
import com.seer.teach.common.utils.SubjectUtils;
import com.seer.teach.teacher.module.entity.VersionsEntity;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 版本转换器
 * </p>
 *
 * @author Lingma
 * @since 2025-10-29
 */
@Mapper
public interface VersionConvert {

    VersionConvert INSTANCE = Mappers.getMapper(VersionConvert.class);
    
    /**
     * 将版本实体列表按版本名称分组，并转换为版本映射响应列表
     * @param versions 版本实体列表
     * @return 版本映射响应列表
     */
    default List<VersionMappingResp> convertToVersionMappingRespList(List<VersionsEntity> versions) {
        return versions.stream()
                .collect(Collectors.groupingBy(
                        VersionsEntity::getVersionName,
                        Collectors.mapping(VersionsEntity::getId, Collectors.toList())))
                .entrySet().stream()
                .map(entry -> {
                    VersionMappingResp resp = new VersionMappingResp();
                    resp.setVersionName(entry.getKey());
                    resp.setVersionIds(entry.getValue());
                    return resp;
                })
                .collect(Collectors.collectingAndThen(Collectors.toList(), list -> {
                    java.util.Collections.reverse(list);
                    return list;
                }));
    }

    default List<VersionResp> convertToVersionRespList(List<VersionsEntity> versions){
        return versions.stream().map(entry ->{
            VersionResp resp = new VersionResp();
            resp.setSubjectName(SubjectUtils.getSubjectNameBySubjectId(entry.getSubjectId()));
            resp.setSubjectId(entry.getSubjectId());
            resp.setVersionName(entry.getVersionName());
            resp.setVersionId(entry.getId());
            return resp;
        }).collect(Collectors.toList());
    }
}