package com.zhyc.module.base.service;

import com.zhyc.module.base.domain.SheepFile;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * 羊只档案Service接口
 * 
 * @author wyt
 * @date 2025-07-13
 */
public interface ISheepFileService 
{
    /**
     * 查询羊只档案
     * 
     * @param id 羊只档案主键
     * @return 羊只档案
     */
    public SheepFile selectSheepFileById(Long id);

    /**
     * 查询羊只档案列表
     * 
     * @param sheepFile 羊只档案
     * @return 羊只档案集合
     */
    public List<SheepFile> selectSheepFileList(SheepFile sheepFile);


    SheepFile selectBasSheepByManageTags(String trim);

    Long countInGroup();

    List<Map<String,Object>> countBySheepType();
    List<Map<String,Object>> countByBreedStatus();
    List<Map<String,Object>> countByVariety();
    List<Map<String,Object>> countParityOfLactation();

    /**
     * 新增方法：获取指定字段的唯一值列表
     *
     * 这个方法为前端筛选功能提供数据支持
     * 当用户选择某个字段进行筛选时，调用此方法获取该字段的所有可能值
     *
     * @param fieldName 字段名（需要是数据库表中的列名）
     * @return 该字段的所有唯一值列表
     * @throws IllegalArgumentException 当字段名不在白名单中时抛出异常
     *
     * 示例用法：
     * List<String> earTags = getFieldValues("bs_manage_tags");
     * // 返回结果可能是：["AF00001", "AF00002", "AF00003", ...]
     */
    List<String> getFieldValues(String fieldName);

    /**
     * 根据复杂条件查询羊只档案列表
     *
     * @param params 查询参数映射
     * @param sheepFile 原有的查询条件
     * @return 羊只档案列表
     */
    List<SheepFile> selectSheepFileListByCondition(
            Map<String, Object> params,
            SheepFile sheepFile
    );

    @Transactional
    int insertSheepFile(SheepFile sheepFile);

    @Transactional
    int updateSheepFile(SheepFile sheepFile);
}
